-
Notifications
You must be signed in to change notification settings - Fork 219
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(ssa): Hoist MakeArray instructions during loop invariant code motion #6782
Conversation
Changes to Brillig bytecode sizes
🧾 Summary (10% most significant diffs)
Full diff report 👇
|
Changes to number of Brillig opcodes executed
🧾 Summary (10% most significant diffs)
Full diff report 👇
|
Peak Memory Sample
|
Compilation Sample
|
I'll note that if we're creating an array in the loop and mutating it each iteration then this approach would be slower since we'd have an extra inc_rc instruction each iteration and need to do a dynamic check to copy the array. Overall though it's probably a fine tradeoff since the good case of this opt is much better than the worst case applying it can have. |
Yeah good note. The trade-off noted in the description is more for creating immutable arrays outside the loop. However, an array declared mutable inside the loop should already be issuing an inc_rc instruction after being created and will be copied already every iteration. |
…nto mv/hoist-make-array-fromloops
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think hoisting without the mutable checks should be fine. Unlike deduplication, there should be no chance the array in question is used between the hoist point and original point since the instruction just wasn't present there before.
…iant code motion (noir-lang/noir#6782) feat: add `(x | 1)` optimization for booleans (noir-lang/noir#6795) feat: `nargo test -q` (or `nargo test --format terse`) (noir-lang/noir#6776) fix: disable failure persistance in nargo test fuzzing (noir-lang/noir#6777) feat(cli): Verify `return` against ABI and `Prover.toml` (noir-lang/noir#6765) chore(ssa): Activate loop invariant code motion on ACIR functions (noir-lang/noir#6785) fix: use extension in docs link so it also works on GitHub (noir-lang/noir#6787) fix: optimizer to keep track of changing opcode locations (noir-lang/noir#6781) fix: Minimal change to avoid reverting entire PR #6685 (noir-lang/noir#6778)
…tion (noir-lang/noir#6782) feat: add `(x | 1)` optimization for booleans (noir-lang/noir#6795) feat: `nargo test -q` (or `nargo test --format terse`) (noir-lang/noir#6776) fix: disable failure persistance in nargo test fuzzing (noir-lang/noir#6777) feat(cli): Verify `return` against ABI and `Prover.toml` (noir-lang/noir#6765) chore(ssa): Activate loop invariant code motion on ACIR functions (noir-lang/noir#6785) fix: use extension in docs link so it also works on GitHub (noir-lang/noir#6787) fix: optimizer to keep track of changing opcode locations (noir-lang/noir#6781) fix: Minimal change to avoid reverting entire PR #6685 (noir-lang/noir#6778)
* master: (313 commits) chore: Do not print entire functions when running debug trace (#6814) chore(ci): Active rollup circuits in compilation report (#6813) feat(ssa): Bring back tracking of RC instructions during DIE (#6783) feat: add `nargo test --format json` (#6796) chore: Change Id to use a u32 (#6807) feat(ssa): Hoist MakeArray instructions during loop invariant code motion (#6782) feat: add `(x | 1)` optimization for booleans (#6795) feat: `nargo test -q` (or `nargo test --format terse`) (#6776) fix: disable failure persistance in nargo test fuzzing (#6777) feat(cli): Verify `return` against ABI and `Prover.toml` (#6765) chore(ssa): Activate loop invariant code motion on ACIR functions (#6785) fix: use extension in docs link so it also works on GitHub (#6787) fix: optimizer to keep track of changing opcode locations (#6781) fix: Minimal change to avoid reverting entire PR #6685 (#6778) feat: several `nargo test` improvements (#6728) chore: Try replace callstack with a linked list (#6747) chore: Use `NumericType` not `Type` for casts and numeric constants (#6769) chore(ci): Extend compiler memory report to external repos (#6768) chore(ci): Handle external libraries in compilation timing report (#6750) feat(ssa): Implement missing brillig constraints SSA check (#6658) ...
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.67.1</summary> ## [0.67.1](aztec-package-v0.67.0...aztec-package-v0.67.1) (2024-12-17) ### Miscellaneous * Granular CLI imports to reduce start time ([#10778](#10778)) ([e2fd046](e2fd046)) * Split up protocol contract artifacts ([#10765](#10765)) ([5a9ca18](5a9ca18)) * Trace and handle errors in running promises ([#10645](#10645)) ([4cc0a6d](4cc0a6d)) </details> <details><summary>barretenberg.js: 0.67.1</summary> ## [0.67.1](barretenberg.js-v0.67.0...barretenberg.js-v0.67.1) (2024-12-17) ### Features * PXE browser proving ([#10704](#10704)) ([46da3cc](46da3cc)) ### Bug Fixes * **bb.js:** Use globalThis instead of self ([#10747](#10747)) ([309b5f7](309b5f7)), closes [#10741](#10741) * Casting vk to rawbuffer before wasm so it reads from the correct offset ([#10769](#10769)) ([6a5bcfd](6a5bcfd)) </details> <details><summary>aztec-packages: 0.67.1</summary> ## [0.67.1](aztec-packages-v0.67.0...aztec-packages-v0.67.1) (2024-12-17) ### Features * `nargo test -q` (or `nargo test --format terse`) (noir-lang/noir#6776) ([8956e28](8956e28)) * Add `(x | 1)` optimization for booleans (noir-lang/noir#6795) ([8956e28](8956e28)) * Add `nargo test --format json` (noir-lang/noir#6796) ([d74d0fc](d74d0fc)) * Add tree equality assertions ([#10756](#10756)) ([923826a](923826a)) * **avm:** Migrate simulator memory to a map ([#10715](#10715)) ([64d5f2b](64d5f2b)), closes [#10370](#10370) * Better initialization for permutation mapping components ([#10750](#10750)) ([1516d7f](1516d7f)) * Blobs 2. ([#10188](#10188)) ([d0a4b2f](d0a4b2f)) * **blobs:** Add consensus client url to config ([#10059](#10059)) ([1e15bf5](1e15bf5)) * Check max fees per gas ([#10283](#10283)) ([4e59b06](4e59b06)) * **cli:** Verify `return` against ABI and `Prover.toml` (noir-lang/noir#6765) ([8956e28](8956e28)) * Json output for get_node_info ([#10771](#10771)) ([b086c52](b086c52)) * Leaf index requests to the native world state can now be performed as a batch query ([#10649](#10649)) ([a437e73](a437e73)) * New 17 in 20 IVC bench added to actions ([#10777](#10777)) ([9fbcff6](9fbcff6)) * Note hash management in the AVM ([#10666](#10666)) ([e077980](e077980)) * **p2p:** Activate gossipsub tx validators ([#10695](#10695)) ([9cce2c6](9cce2c6)) * PXE browser proving ([#10704](#10704)) ([46da3cc](46da3cc)) * **ssa:** Bring back tracking of RC instructions during DIE (noir-lang/noir#6783) ([308c5ce](308c5ce)) * **ssa:** Hoist MakeArray instructions during loop invariant code motion (noir-lang/noir#6782) ([8956e28](8956e28)) * Sumcheck with disabled rows ([#10068](#10068)) ([abd2226](abd2226)) * TXE detects duplicate nullifiers ([#10764](#10764)) ([7f70110](7f70110)) ### Bug Fixes * Always remove nullified notes ([#10722](#10722)) ([5e4b46d](5e4b46d)) * Avm gas and non-member ([#10709](#10709)) ([dd8cc7b](dd8cc7b)) * **bb.js:** Use globalThis instead of self ([#10747](#10747)) ([309b5f7](309b5f7)), closes [#10741](#10741) * Cache ([#10692](#10692)) ([1b1306c](1b1306c)) * Casting vk to rawbuffer before wasm so it reads from the correct offset ([#10769](#10769)) ([6a5bcfd](6a5bcfd)) * **ci:** Network-test timing ([#10725](#10725)) ([9c9a2dc](9c9a2dc)) * Disable failure persistance in nargo test fuzzing (noir-lang/noir#6777) ([8956e28](8956e28)) * Get e2e jobs ([#10689](#10689)) ([37e1999](37e1999)) * Give build:fast a try in build ([#10702](#10702)) ([32095f6](32095f6)) * Minimal change to avoid reverting entire PR [#6685](#6685) (noir-lang/noir#6778) ([8956e28](8956e28)) * Optimizer to keep track of changing opcode locations (noir-lang/noir#6781) ([8956e28](8956e28)) * Race condition in block stream ([#10779](#10779)) ([64bccd0](64bccd0)) * Race condition when cleaning epoch proof quotes ([#10795](#10795)) ([f540fbe](f540fbe)) * **testdata:** Relative path calculation ([#10791](#10791)) ([5a530db](5a530db)) * Use correct size for databus_id ([#10673](#10673)) ([95eb658](95eb658)) * Use extension in docs link so it also works on GitHub (noir-lang/noir#6787) ([8956e28](8956e28)) * Use throw instead of reject in broker facade ([#10735](#10735)) ([cc6a72b](cc6a72b)) ### Miscellaneous * `getLogsByTags` request batching in `syncTaggedLogs` ([#10716](#10716)) ([bbbf38b](bbbf38b)) * Add `Instruction::map_values_mut` (noir-lang/noir#6756) ([308c5ce](308c5ce)) * Add errors to abis ([#10697](#10697)) ([5c8e017](5c8e017)) * Add retries for prover node p2p test ([#10699](#10699)) ([4115bf9](4115bf9)) * Add spans to proving job ([#10794](#10794)) ([df3c51b](df3c51b)) * **avm:** Disable fake avm recursive verifier from the public base rollup ([#10690](#10690)) ([b6c9c41](b6c9c41)) * Better reqresp logging + handle empty responses in snappy ([#10657](#10657)) ([934107f](934107f)) * Bump metrics and node pool ([#10745](#10745)) ([9bb88bf](9bb88bf)) * Change Id to use a u32 (noir-lang/noir#6807) ([d74d0fc](d74d0fc)) * **ci:** Active rollup circuits in compilation report (noir-lang/noir#6813) ([308c5ce](308c5ce)) * **ci:** Add bloblib to external checks (noir-lang/noir#6818) ([381b0b8](381b0b8)) * Cleanup after e2e tests ([#10748](#10748)) ([284b0a4](284b0a4)) * Disable ARM CI ([#10682](#10682)) ([b16945b](b16945b)) * Do not print entire functions when running debug trace (noir-lang/noir#6814) ([308c5ce](308c5ce)) * **docs:** Workaround (noir-lang/noir#6819) ([381b0b8](381b0b8)) * Granular CLI imports to reduce start time ([#10778](#10778)) ([e2fd046](e2fd046)) * Hot fixes ([4e00dc4](4e00dc4)) * Log error in retry module ([#10719](#10719)) ([84ea539](84ea539)) * Manage call stacks using a tree (noir-lang/noir#6791) ([381b0b8](381b0b8)) * Move decider PK allocation to methods ([#10670](#10670)) ([1ab9e30](1ab9e30)) * **p2p:** Move services into folders ([#10694](#10694)) ([e28d12a](e28d12a)) * **prover:** Prover node should not gossip attestations ([#10672](#10672)) ([41fc0f0](41fc0f0)) * Remove default export for noir contracts js ([#10762](#10762)) ([c8e7763](c8e7763)) * Remove sinon in favor of a date provider ([#10705](#10705)) ([3d3fabb](3d3fabb)) * Remove spurious echo ([#10774](#10774)) ([5538f8c](5538f8c)) * Replace relative paths to noir-protocol-circuits ([f85fa3f](f85fa3f)) * Replace relative paths to noir-protocol-circuits ([b19c561](b19c561)) * Set max txs in spam test ([#10717](#10717)) ([a50ff6c](a50ff6c)) * Slack notifications for networks ([#10784](#10784)) ([bab9f85](bab9f85)) * Split up protocol contract artifacts ([#10765](#10765)) ([5a9ca18](5a9ca18)) * **ssa:** Activate loop invariant code motion on ACIR functions (noir-lang/noir#6785) ([8956e28](8956e28)) * Sync grafana dashboard ([#10792](#10792)) ([421fb65](421fb65)) * Tagging cleanup ([#10675](#10675)) ([52b541a](52b541a)) * Trace and handle errors in running promises ([#10645](#10645)) ([4cc0a6d](4cc0a6d)) * Update external joiner script for new networks ([#10810](#10810)) ([5f11cf4](5f11cf4)) </details> <details><summary>barretenberg: 0.67.1</summary> ## [0.67.1](barretenberg-v0.67.0...barretenberg-v0.67.1) (2024-12-17) ### Features * Add tree equality assertions ([#10756](#10756)) ([923826a](923826a)) * Better initialization for permutation mapping components ([#10750](#10750)) ([1516d7f](1516d7f)) * Leaf index requests to the native world state can now be performed as a batch query ([#10649](#10649)) ([a437e73](a437e73)) * New 17 in 20 IVC bench added to actions ([#10777](#10777)) ([9fbcff6](9fbcff6)) * Note hash management in the AVM ([#10666](#10666)) ([e077980](e077980)) * Sumcheck with disabled rows ([#10068](#10068)) ([abd2226](abd2226)) ### Bug Fixes * Avm gas and non-member ([#10709](#10709)) ([dd8cc7b](dd8cc7b)) * Use correct size for databus_id ([#10673](#10673)) ([95eb658](95eb658)) ### Miscellaneous * Move decider PK allocation to methods ([#10670](#10670)) ([1ab9e30](1ab9e30)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.67.1</summary> ## [0.67.1](aztec-package-v0.67.0...aztec-package-v0.67.1) (2024-12-17) ### Miscellaneous * Granular CLI imports to reduce start time ([#10778](#10778)) ([e2fd046](e2fd046)) * Split up protocol contract artifacts ([#10765](#10765)) ([5a9ca18](5a9ca18)) * Trace and handle errors in running promises ([#10645](#10645)) ([4cc0a6d](4cc0a6d)) </details> <details><summary>barretenberg.js: 0.67.1</summary> ## [0.67.1](barretenberg.js-v0.67.0...barretenberg.js-v0.67.1) (2024-12-17) ### Features * PXE browser proving ([#10704](#10704)) ([46da3cc](46da3cc)) ### Bug Fixes * **bb.js:** Use globalThis instead of self ([#10747](#10747)) ([309b5f7](309b5f7)), closes [#10741](#10741) * Casting vk to rawbuffer before wasm so it reads from the correct offset ([#10769](#10769)) ([6a5bcfd](6a5bcfd)) </details> <details><summary>aztec-packages: 0.67.1</summary> ## [0.67.1](aztec-packages-v0.67.0...aztec-packages-v0.67.1) (2024-12-17) ### Features * `nargo test -q` (or `nargo test --format terse`) (noir-lang/noir#6776) ([8956e28](8956e28)) * Add `(x | 1)` optimization for booleans (noir-lang/noir#6795) ([8956e28](8956e28)) * Add `nargo test --format json` (noir-lang/noir#6796) ([d74d0fc](d74d0fc)) * Add tree equality assertions ([#10756](#10756)) ([923826a](923826a)) * **avm:** Migrate simulator memory to a map ([#10715](#10715)) ([64d5f2b](64d5f2b)), closes [#10370](#10370) * Better initialization for permutation mapping components ([#10750](#10750)) ([1516d7f](1516d7f)) * Blobs 2. ([#10188](#10188)) ([d0a4b2f](d0a4b2f)) * **blobs:** Add consensus client url to config ([#10059](#10059)) ([1e15bf5](1e15bf5)) * Check max fees per gas ([#10283](#10283)) ([4e59b06](4e59b06)) * **cli:** Verify `return` against ABI and `Prover.toml` (noir-lang/noir#6765) ([8956e28](8956e28)) * Don't store every block number in block indices DB ([#10658](#10658)) ([a3fba84](a3fba84)) * Json output for get_node_info ([#10771](#10771)) ([b086c52](b086c52)) * Leaf index requests to the native world state can now be performed as a batch query ([#10649](#10649)) ([a437e73](a437e73)) * New 17 in 20 IVC bench added to actions ([#10777](#10777)) ([9fbcff6](9fbcff6)) * Note hash management in the AVM ([#10666](#10666)) ([e077980](e077980)) * **p2p:** Activate gossipsub tx validators ([#10695](#10695)) ([9cce2c6](9cce2c6)) * **p2p:** Attestation pool persistence ([#10667](#10667)) ([dacef9f](dacef9f)) * PXE browser proving ([#10704](#10704)) ([46da3cc](46da3cc)) * **ssa:** Bring back tracking of RC instructions during DIE (noir-lang/noir#6783) ([308c5ce](308c5ce)) * **ssa:** Hoist MakeArray instructions during loop invariant code motion (noir-lang/noir#6782) ([8956e28](8956e28)) * Sumcheck with disabled rows ([#10068](#10068)) ([abd2226](abd2226)) * TXE detects duplicate nullifiers ([#10764](#10764)) ([7f70110](7f70110)) ### Bug Fixes * Always remove nullified notes ([#10722](#10722)) ([5e4b46d](5e4b46d)) * Avm gas and non-member ([#10709](#10709)) ([dd8cc7b](dd8cc7b)) * AVM witgen track gas for nested calls and external halts ([#10731](#10731)) ([b8bdb52](b8bdb52)) * **bb.js:** Use globalThis instead of self ([#10747](#10747)) ([309b5f7](309b5f7)), closes [#10741](#10741) * Block building test timeout ([#10812](#10812)) ([2cad3e5](2cad3e5)) * Cache ([#10692](#10692)) ([1b1306c](1b1306c)) * Casting vk to rawbuffer before wasm so it reads from the correct offset ([#10769](#10769)) ([6a5bcfd](6a5bcfd)) * **ci:** Network-test timing ([#10725](#10725)) ([9c9a2dc](9c9a2dc)) * Disable failure persistance in nargo test fuzzing (noir-lang/noir#6777) ([8956e28](8956e28)) * Get e2e jobs ([#10689](#10689)) ([37e1999](37e1999)) * Give build:fast a try in build ([#10702](#10702)) ([32095f6](32095f6)) * Minimal change to avoid reverting entire PR [#6685](#6685) (noir-lang/noir#6778) ([8956e28](8956e28)) * Optimizer to keep track of changing opcode locations (noir-lang/noir#6781) ([8956e28](8956e28)) * Race condition in block stream ([#10779](#10779)) ([64bccd0](64bccd0)) * Race condition when cleaning epoch proof quotes ([#10795](#10795)) ([f540fbe](f540fbe)) * **testdata:** Relative path calculation ([#10791](#10791)) ([5a530db](5a530db)) * Try fix e2e epochs in CI ([#10804](#10804)) ([ba28788](ba28788)) * Use correct size for databus_id ([#10673](#10673)) ([95eb658](95eb658)) * Use extension in docs link so it also works on GitHub (noir-lang/noir#6787) ([8956e28](8956e28)) * Use throw instead of reject in broker facade ([#10735](#10735)) ([cc6a72b](cc6a72b)) ### Miscellaneous * `getLogsByTags` request batching in `syncTaggedLogs` ([#10716](#10716)) ([bbbf38b](bbbf38b)) * Add `Instruction::map_values_mut` (noir-lang/noir#6756) ([308c5ce](308c5ce)) * Add errors to abis ([#10697](#10697)) ([5c8e017](5c8e017)) * Add retries for prover node p2p test ([#10699](#10699)) ([4115bf9](4115bf9)) * Add spans to proving job ([#10794](#10794)) ([df3c51b](df3c51b)) * Average alerts across namespace for 1 hour ([#10827](#10827)) ([962a7a2](962a7a2)) * **avm:** Disable fake avm recursive verifier from the public base rollup ([#10690](#10690)) ([b6c9c41](b6c9c41)) * **avm:** Radix opcode - remove immediates ([#10696](#10696)) ([4ac13e6](4ac13e6)), closes [#10371](#10371) * Better reqresp logging + handle empty responses in snappy ([#10657](#10657)) ([934107f](934107f)) * Bump metrics and node pool ([#10745](#10745)) ([9bb88bf](9bb88bf)) * Change Id to use a u32 (noir-lang/noir#6807) ([d74d0fc](d74d0fc)) * **ci:** Active rollup circuits in compilation report (noir-lang/noir#6813) ([308c5ce](308c5ce)) * **ci:** Add bloblib to external checks (noir-lang/noir#6818) ([381b0b8](381b0b8)) * Cleanup after e2e tests ([#10748](#10748)) ([284b0a4](284b0a4)) * Disable ARM CI ([#10682](#10682)) ([b16945b](b16945b)) * Do not print entire functions when running debug trace (noir-lang/noir#6814) ([308c5ce](308c5ce)) * **docs:** Update migration notes ([#10829](#10829)) ([be7cadf](be7cadf)) * **docs:** Workaround (noir-lang/noir#6819) ([381b0b8](381b0b8)) * Granular CLI imports to reduce start time ([#10778](#10778)) ([e2fd046](e2fd046)) * Log error in retry module ([#10719](#10719)) ([84ea539](84ea539)) * Manage call stacks using a tree (noir-lang/noir#6791) ([381b0b8](381b0b8)) * Move decider PK allocation to methods ([#10670](#10670)) ([1ab9e30](1ab9e30)) * **p2p:** Move services into folders ([#10694](#10694)) ([e28d12a](e28d12a)) * **prover:** Prover node should not gossip attestations ([#10672](#10672)) ([41fc0f0](41fc0f0)) * Remove default export for noir contracts js ([#10762](#10762)) ([c8e7763](c8e7763)) * Remove sinon in favor of a date provider ([#10705](#10705)) ([3d3fabb](3d3fabb)) * Remove spurious echo ([#10774](#10774)) ([5538f8c](5538f8c)) * Replace relative paths to noir-protocol-circuits ([f85fa3f](f85fa3f)) * Replace relative paths to noir-protocol-circuits ([b19c561](b19c561)) * Set max txs in spam test ([#10717](#10717)) ([a50ff6c](a50ff6c)) * Slack notifications for networks ([#10784](#10784)) ([bab9f85](bab9f85)) * Split up protocol contract artifacts ([#10765](#10765)) ([5a9ca18](5a9ca18)) * **ssa:** Activate loop invariant code motion on ACIR functions (noir-lang/noir#6785) ([8956e28](8956e28)) * Sync grafana dashboard ([#10792](#10792)) ([421fb65](421fb65)) * Tagging cleanup ([#10675](#10675)) ([52b541a](52b541a)) * Trace and handle errors in running promises ([#10645](#10645)) ([4cc0a6d](4cc0a6d)) * Update external joiner script for new networks ([#10810](#10810)) ([5f11cf4](5f11cf4)) </details> <details><summary>barretenberg: 0.67.1</summary> ## [0.67.1](barretenberg-v0.67.0...barretenberg-v0.67.1) (2024-12-17) ### Features * Add tree equality assertions ([#10756](#10756)) ([923826a](923826a)) * Better initialization for permutation mapping components ([#10750](#10750)) ([1516d7f](1516d7f)) * Don't store every block number in block indices DB ([#10658](#10658)) ([a3fba84](a3fba84)) * Leaf index requests to the native world state can now be performed as a batch query ([#10649](#10649)) ([a437e73](a437e73)) * New 17 in 20 IVC bench added to actions ([#10777](#10777)) ([9fbcff6](9fbcff6)) * Note hash management in the AVM ([#10666](#10666)) ([e077980](e077980)) * Sumcheck with disabled rows ([#10068](#10068)) ([abd2226](abd2226)) ### Bug Fixes * Avm gas and non-member ([#10709](#10709)) ([dd8cc7b](dd8cc7b)) * AVM witgen track gas for nested calls and external halts ([#10731](#10731)) ([b8bdb52](b8bdb52)) * Use correct size for databus_id ([#10673](#10673)) ([95eb658](95eb658)) ### Miscellaneous * **avm:** Radix opcode - remove immediates ([#10696](#10696)) ([4ac13e6](4ac13e6)), closes [#10371](#10371) * Move decider PK allocation to methods ([#10670](#10670)) ([1ab9e30](1ab9e30)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.67.1</summary> ## [0.67.1](AztecProtocol/aztec-packages@aztec-package-v0.67.0...aztec-package-v0.67.1) (2024-12-17) ### Miscellaneous * Granular CLI imports to reduce start time ([#10778](AztecProtocol/aztec-packages#10778)) ([e2fd046](AztecProtocol/aztec-packages@e2fd046)) * Split up protocol contract artifacts ([#10765](AztecProtocol/aztec-packages#10765)) ([5a9ca18](AztecProtocol/aztec-packages@5a9ca18)) * Trace and handle errors in running promises ([#10645](AztecProtocol/aztec-packages#10645)) ([4cc0a6d](AztecProtocol/aztec-packages@4cc0a6d)) </details> <details><summary>barretenberg.js: 0.67.1</summary> ## [0.67.1](AztecProtocol/aztec-packages@barretenberg.js-v0.67.0...barretenberg.js-v0.67.1) (2024-12-17) ### Features * PXE browser proving ([#10704](AztecProtocol/aztec-packages#10704)) ([46da3cc](AztecProtocol/aztec-packages@46da3cc)) ### Bug Fixes * **bb.js:** Use globalThis instead of self ([#10747](AztecProtocol/aztec-packages#10747)) ([309b5f7](AztecProtocol/aztec-packages@309b5f7)), closes [#10741](AztecProtocol/aztec-packages#10741) * Casting vk to rawbuffer before wasm so it reads from the correct offset ([#10769](AztecProtocol/aztec-packages#10769)) ([6a5bcfd](AztecProtocol/aztec-packages@6a5bcfd)) </details> <details><summary>aztec-packages: 0.67.1</summary> ## [0.67.1](AztecProtocol/aztec-packages@aztec-packages-v0.67.0...aztec-packages-v0.67.1) (2024-12-17) ### Features * `nargo test -q` (or `nargo test --format terse`) (noir-lang/noir#6776) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Add `(x | 1)` optimization for booleans (noir-lang/noir#6795) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Add `nargo test --format json` (noir-lang/noir#6796) ([d74d0fc](AztecProtocol/aztec-packages@d74d0fc)) * Add tree equality assertions ([#10756](AztecProtocol/aztec-packages#10756)) ([923826a](AztecProtocol/aztec-packages@923826a)) * **avm:** Migrate simulator memory to a map ([#10715](AztecProtocol/aztec-packages#10715)) ([64d5f2b](AztecProtocol/aztec-packages@64d5f2b)), closes [#10370](AztecProtocol/aztec-packages#10370) * Better initialization for permutation mapping components ([#10750](AztecProtocol/aztec-packages#10750)) ([1516d7f](AztecProtocol/aztec-packages@1516d7f)) * Blobs 2. ([#10188](AztecProtocol/aztec-packages#10188)) ([d0a4b2f](AztecProtocol/aztec-packages@d0a4b2f)) * **blobs:** Add consensus client url to config ([#10059](AztecProtocol/aztec-packages#10059)) ([1e15bf5](AztecProtocol/aztec-packages@1e15bf5)) * Check max fees per gas ([#10283](AztecProtocol/aztec-packages#10283)) ([4e59b06](AztecProtocol/aztec-packages@4e59b06)) * **cli:** Verify `return` against ABI and `Prover.toml` (noir-lang/noir#6765) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Don't store every block number in block indices DB ([#10658](AztecProtocol/aztec-packages#10658)) ([a3fba84](AztecProtocol/aztec-packages@a3fba84)) * Json output for get_node_info ([#10771](AztecProtocol/aztec-packages#10771)) ([b086c52](AztecProtocol/aztec-packages@b086c52)) * Leaf index requests to the native world state can now be performed as a batch query ([#10649](AztecProtocol/aztec-packages#10649)) ([a437e73](AztecProtocol/aztec-packages@a437e73)) * New 17 in 20 IVC bench added to actions ([#10777](AztecProtocol/aztec-packages#10777)) ([9fbcff6](AztecProtocol/aztec-packages@9fbcff6)) * Note hash management in the AVM ([#10666](AztecProtocol/aztec-packages#10666)) ([e077980](AztecProtocol/aztec-packages@e077980)) * **p2p:** Activate gossipsub tx validators ([#10695](AztecProtocol/aztec-packages#10695)) ([9cce2c6](AztecProtocol/aztec-packages@9cce2c6)) * **p2p:** Attestation pool persistence ([#10667](AztecProtocol/aztec-packages#10667)) ([dacef9f](AztecProtocol/aztec-packages@dacef9f)) * PXE browser proving ([#10704](AztecProtocol/aztec-packages#10704)) ([46da3cc](AztecProtocol/aztec-packages@46da3cc)) * **ssa:** Bring back tracking of RC instructions during DIE (noir-lang/noir#6783) ([308c5ce](AztecProtocol/aztec-packages@308c5ce)) * **ssa:** Hoist MakeArray instructions during loop invariant code motion (noir-lang/noir#6782) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Sumcheck with disabled rows ([#10068](AztecProtocol/aztec-packages#10068)) ([abd2226](AztecProtocol/aztec-packages@abd2226)) * TXE detects duplicate nullifiers ([#10764](AztecProtocol/aztec-packages#10764)) ([7f70110](AztecProtocol/aztec-packages@7f70110)) ### Bug Fixes * Always remove nullified notes ([#10722](AztecProtocol/aztec-packages#10722)) ([5e4b46d](AztecProtocol/aztec-packages@5e4b46d)) * Avm gas and non-member ([#10709](AztecProtocol/aztec-packages#10709)) ([dd8cc7b](AztecProtocol/aztec-packages@dd8cc7b)) * AVM witgen track gas for nested calls and external halts ([#10731](AztecProtocol/aztec-packages#10731)) ([b8bdb52](AztecProtocol/aztec-packages@b8bdb52)) * **bb.js:** Use globalThis instead of self ([#10747](AztecProtocol/aztec-packages#10747)) ([309b5f7](AztecProtocol/aztec-packages@309b5f7)), closes [#10741](AztecProtocol/aztec-packages#10741) * Block building test timeout ([#10812](AztecProtocol/aztec-packages#10812)) ([2cad3e5](AztecProtocol/aztec-packages@2cad3e5)) * Cache ([#10692](AztecProtocol/aztec-packages#10692)) ([1b1306c](AztecProtocol/aztec-packages@1b1306c)) * Casting vk to rawbuffer before wasm so it reads from the correct offset ([#10769](AztecProtocol/aztec-packages#10769)) ([6a5bcfd](AztecProtocol/aztec-packages@6a5bcfd)) * **ci:** Network-test timing ([#10725](AztecProtocol/aztec-packages#10725)) ([9c9a2dc](AztecProtocol/aztec-packages@9c9a2dc)) * Disable failure persistance in nargo test fuzzing (noir-lang/noir#6777) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Get e2e jobs ([#10689](AztecProtocol/aztec-packages#10689)) ([37e1999](AztecProtocol/aztec-packages@37e1999)) * Give build:fast a try in build ([#10702](AztecProtocol/aztec-packages#10702)) ([32095f6](AztecProtocol/aztec-packages@32095f6)) * Minimal change to avoid reverting entire PR [#6685](AztecProtocol/aztec-packages#6685) (noir-lang/noir#6778) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Optimizer to keep track of changing opcode locations (noir-lang/noir#6781) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Race condition in block stream ([#10779](AztecProtocol/aztec-packages#10779)) ([64bccd0](AztecProtocol/aztec-packages@64bccd0)) * Race condition when cleaning epoch proof quotes ([#10795](AztecProtocol/aztec-packages#10795)) ([f540fbe](AztecProtocol/aztec-packages@f540fbe)) * **testdata:** Relative path calculation ([#10791](AztecProtocol/aztec-packages#10791)) ([5a530db](AztecProtocol/aztec-packages@5a530db)) * Try fix e2e epochs in CI ([#10804](AztecProtocol/aztec-packages#10804)) ([ba28788](AztecProtocol/aztec-packages@ba28788)) * Use correct size for databus_id ([#10673](AztecProtocol/aztec-packages#10673)) ([95eb658](AztecProtocol/aztec-packages@95eb658)) * Use extension in docs link so it also works on GitHub (noir-lang/noir#6787) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Use throw instead of reject in broker facade ([#10735](AztecProtocol/aztec-packages#10735)) ([cc6a72b](AztecProtocol/aztec-packages@cc6a72b)) ### Miscellaneous * `getLogsByTags` request batching in `syncTaggedLogs` ([#10716](AztecProtocol/aztec-packages#10716)) ([bbbf38b](AztecProtocol/aztec-packages@bbbf38b)) * Add `Instruction::map_values_mut` (noir-lang/noir#6756) ([308c5ce](AztecProtocol/aztec-packages@308c5ce)) * Add errors to abis ([#10697](AztecProtocol/aztec-packages#10697)) ([5c8e017](AztecProtocol/aztec-packages@5c8e017)) * Add retries for prover node p2p test ([#10699](AztecProtocol/aztec-packages#10699)) ([4115bf9](AztecProtocol/aztec-packages@4115bf9)) * Add spans to proving job ([#10794](AztecProtocol/aztec-packages#10794)) ([df3c51b](AztecProtocol/aztec-packages@df3c51b)) * Average alerts across namespace for 1 hour ([#10827](AztecProtocol/aztec-packages#10827)) ([962a7a2](AztecProtocol/aztec-packages@962a7a2)) * **avm:** Disable fake avm recursive verifier from the public base rollup ([#10690](AztecProtocol/aztec-packages#10690)) ([b6c9c41](AztecProtocol/aztec-packages@b6c9c41)) * **avm:** Radix opcode - remove immediates ([#10696](AztecProtocol/aztec-packages#10696)) ([4ac13e6](AztecProtocol/aztec-packages@4ac13e6)), closes [#10371](AztecProtocol/aztec-packages#10371) * Better reqresp logging + handle empty responses in snappy ([#10657](AztecProtocol/aztec-packages#10657)) ([934107f](AztecProtocol/aztec-packages@934107f)) * Bump metrics and node pool ([#10745](AztecProtocol/aztec-packages#10745)) ([9bb88bf](AztecProtocol/aztec-packages@9bb88bf)) * Change Id to use a u32 (noir-lang/noir#6807) ([d74d0fc](AztecProtocol/aztec-packages@d74d0fc)) * **ci:** Active rollup circuits in compilation report (noir-lang/noir#6813) ([308c5ce](AztecProtocol/aztec-packages@308c5ce)) * **ci:** Add bloblib to external checks (noir-lang/noir#6818) ([381b0b8](AztecProtocol/aztec-packages@381b0b8)) * Cleanup after e2e tests ([#10748](AztecProtocol/aztec-packages#10748)) ([284b0a4](AztecProtocol/aztec-packages@284b0a4)) * Disable ARM CI ([#10682](AztecProtocol/aztec-packages#10682)) ([b16945b](AztecProtocol/aztec-packages@b16945b)) * Do not print entire functions when running debug trace (noir-lang/noir#6814) ([308c5ce](AztecProtocol/aztec-packages@308c5ce)) * **docs:** Update migration notes ([#10829](AztecProtocol/aztec-packages#10829)) ([be7cadf](AztecProtocol/aztec-packages@be7cadf)) * **docs:** Workaround (noir-lang/noir#6819) ([381b0b8](AztecProtocol/aztec-packages@381b0b8)) * Granular CLI imports to reduce start time ([#10778](AztecProtocol/aztec-packages#10778)) ([e2fd046](AztecProtocol/aztec-packages@e2fd046)) * Log error in retry module ([#10719](AztecProtocol/aztec-packages#10719)) ([84ea539](AztecProtocol/aztec-packages@84ea539)) * Manage call stacks using a tree (noir-lang/noir#6791) ([381b0b8](AztecProtocol/aztec-packages@381b0b8)) * Move decider PK allocation to methods ([#10670](AztecProtocol/aztec-packages#10670)) ([1ab9e30](AztecProtocol/aztec-packages@1ab9e30)) * **p2p:** Move services into folders ([#10694](AztecProtocol/aztec-packages#10694)) ([e28d12a](AztecProtocol/aztec-packages@e28d12a)) * **prover:** Prover node should not gossip attestations ([#10672](AztecProtocol/aztec-packages#10672)) ([41fc0f0](AztecProtocol/aztec-packages@41fc0f0)) * Remove default export for noir contracts js ([#10762](AztecProtocol/aztec-packages#10762)) ([c8e7763](AztecProtocol/aztec-packages@c8e7763)) * Remove sinon in favor of a date provider ([#10705](AztecProtocol/aztec-packages#10705)) ([3d3fabb](AztecProtocol/aztec-packages@3d3fabb)) * Remove spurious echo ([#10774](AztecProtocol/aztec-packages#10774)) ([5538f8c](AztecProtocol/aztec-packages@5538f8c)) * Replace relative paths to noir-protocol-circuits ([f85fa3f](AztecProtocol/aztec-packages@f85fa3f)) * Replace relative paths to noir-protocol-circuits ([b19c561](AztecProtocol/aztec-packages@b19c561)) * Set max txs in spam test ([#10717](AztecProtocol/aztec-packages#10717)) ([a50ff6c](AztecProtocol/aztec-packages@a50ff6c)) * Slack notifications for networks ([#10784](AztecProtocol/aztec-packages#10784)) ([bab9f85](AztecProtocol/aztec-packages@bab9f85)) * Split up protocol contract artifacts ([#10765](AztecProtocol/aztec-packages#10765)) ([5a9ca18](AztecProtocol/aztec-packages@5a9ca18)) * **ssa:** Activate loop invariant code motion on ACIR functions (noir-lang/noir#6785) ([8956e28](AztecProtocol/aztec-packages@8956e28)) * Sync grafana dashboard ([#10792](AztecProtocol/aztec-packages#10792)) ([421fb65](AztecProtocol/aztec-packages@421fb65)) * Tagging cleanup ([#10675](AztecProtocol/aztec-packages#10675)) ([52b541a](AztecProtocol/aztec-packages@52b541a)) * Trace and handle errors in running promises ([#10645](AztecProtocol/aztec-packages#10645)) ([4cc0a6d](AztecProtocol/aztec-packages@4cc0a6d)) * Update external joiner script for new networks ([#10810](AztecProtocol/aztec-packages#10810)) ([5f11cf4](AztecProtocol/aztec-packages@5f11cf4)) </details> <details><summary>barretenberg: 0.67.1</summary> ## [0.67.1](AztecProtocol/aztec-packages@barretenberg-v0.67.0...barretenberg-v0.67.1) (2024-12-17) ### Features * Add tree equality assertions ([#10756](AztecProtocol/aztec-packages#10756)) ([923826a](AztecProtocol/aztec-packages@923826a)) * Better initialization for permutation mapping components ([#10750](AztecProtocol/aztec-packages#10750)) ([1516d7f](AztecProtocol/aztec-packages@1516d7f)) * Don't store every block number in block indices DB ([#10658](AztecProtocol/aztec-packages#10658)) ([a3fba84](AztecProtocol/aztec-packages@a3fba84)) * Leaf index requests to the native world state can now be performed as a batch query ([#10649](AztecProtocol/aztec-packages#10649)) ([a437e73](AztecProtocol/aztec-packages@a437e73)) * New 17 in 20 IVC bench added to actions ([#10777](AztecProtocol/aztec-packages#10777)) ([9fbcff6](AztecProtocol/aztec-packages@9fbcff6)) * Note hash management in the AVM ([#10666](AztecProtocol/aztec-packages#10666)) ([e077980](AztecProtocol/aztec-packages@e077980)) * Sumcheck with disabled rows ([#10068](AztecProtocol/aztec-packages#10068)) ([abd2226](AztecProtocol/aztec-packages@abd2226)) ### Bug Fixes * Avm gas and non-member ([#10709](AztecProtocol/aztec-packages#10709)) ([dd8cc7b](AztecProtocol/aztec-packages@dd8cc7b)) * AVM witgen track gas for nested calls and external halts ([#10731](AztecProtocol/aztec-packages#10731)) ([b8bdb52](AztecProtocol/aztec-packages@b8bdb52)) * Use correct size for databus_id ([#10673](AztecProtocol/aztec-packages#10673)) ([95eb658](AztecProtocol/aztec-packages@95eb658)) ### Miscellaneous * **avm:** Radix opcode - remove immediates ([#10696](AztecProtocol/aztec-packages#10696)) ([4ac13e6](AztecProtocol/aztec-packages@4ac13e6)), closes [#10371](AztecProtocol/aztec-packages#10371) * Move decider PK allocation to methods ([#10670](AztecProtocol/aztec-packages#10670)) ([1ab9e30](AztecProtocol/aztec-packages@1ab9e30)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Description
Problem*
Resolves #6775
Summary*
In #6685 we restricted that
MakeArray
can only be deduplicated in an ACIR runtime. This is due to that arrays can actually be mutated in unconstrained code.Now when hoisting loop invariants, we check whether we are hoisting a
MakeArray
. If we have hoisted aMakeArray
instruction, we also insert anIncrementRc
instruction in the old location ofMakeArray
in the loop block.This PR is trading off the cost of creating an array inside of a loop vs. the cost of creating an array once + incrementing its reference counter inside the loop. Other than for the smallest of arrays, this tradeoff should almost always be worth it.
Before merging we may want to determine some kind of heuristic for when this optimization should run. It could also be left for a follow-up PR.
Additional Context
A potential optimization to follow-up this PR would be to bring back the rc tracker that was fully removed in DIE #6700. This would more generally help with the cost from deduplicating
MakeArray
instructions more generally as right now we always insert anIncrementRc
upon deduplicating or hoisting aMakeArray
. If that array is never mutably borrowed in the block, DIE should be able to remove those instructions that were included to maintain correctness.regression_4709
performance:Master:
The test was previously excluded from our CI's Brillig tests due to that execution would hang. I even ran out of memory and crashed the mainframe when trying to profile it.
After this PR:
~52 million opcodes executed
After this PR w/ #6783:
~1.2 millions opcodes executed
blob
performance:Master:
~990 million opcodes executed
After this PR:
~775 million opcodes executed (23.7% improvement from master)
After this PR w/ #6783:
~449 million opcodes executed (54.6% improvement from master)
Documentation*
Check one:
PR Checklist*
cargo fmt
on default settings.