Skip to content

chore(ACIRgen): smaller AcirDynamicArray value_types#10128

Merged
asterite merged 11 commits intomasterfrom
ab/acir-shorter-value_types
Oct 9, 2025
Merged

chore(ACIRgen): smaller AcirDynamicArray value_types#10128
asterite merged 11 commits intomasterfrom
ab/acir-shorter-value_types

Conversation

@asterite
Copy link
Collaborator

@asterite asterite commented Oct 8, 2025

Description

Problem

Resolves #10127

Summary

Additional Context

Documentation

Check one:

  • No documentation needed.
  • Documentation included in this PR.
  • [For Experimental Features] Documentation to be submitted in a separate PR.

PR Checklist

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt on default settings.

@asterite asterite added the bench-show Display benchmark results on PR label Oct 8, 2025
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACVM Benchmarks

Details
Benchmark suite Current: 6a0f484 Previous: da35eca Ratio
purely_sequential_opcodes 260844 ns/iter (± 1042) 266950 ns/iter (± 806) 0.98
perfectly_parallel_opcodes 229426 ns/iter (± 7343) 231310 ns/iter (± 1224) 0.99
perfectly_parallel_batch_inversion_opcodes 2784362 ns/iter (± 14386) 2785268 ns/iter (± 2249) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test Suite Duration

Details
Benchmark suite Current: 6a0f484 Previous: da35eca Ratio
test_report_AztecProtocol_aztec-packages_noir-projects_aztec-nr 124 s 132 s 0.94
test_report_AztecProtocol_aztec-packages_noir-projects_noir-contracts 135 s 130 s 1.04
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_blob 274 s 251 s 1.09
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_private-kernel-lib 216 s 211 s 1.02
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_reset-kernel-lib 35 s 35 s 1
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_types 133 s 133 s 1
test_report_noir-lang_noir-bignum_ 153 s 173 s 0.88
test_report_noir-lang_noir_bigcurve_ 393 s 353 s 1.11
test_report_noir-lang_sha256_ 16 s 15 s 1.07
test_report_noir-lang_sha512_ 13 s 15 s 0.87
test_report_zkpassport_noir-ecdsa_ 2 s 1 s 2
test_report_zkpassport_noir_rsa_ 1 s 1 s 1

This comment was automatically generated by workflow using github-action-benchmark.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Execution Time

Details
Benchmark suite Current: 6a0f484 Previous: da35eca Ratio
private-kernel-inner 0.012 s 0.012 s 1
private-kernel-reset 0.156 s 0.158 s 0.99
private-kernel-tail 0.01 s 0.01 s 1
rollup-block-root-first-empty-tx 0.003 s 0.003 s 1
rollup-block-root-single-tx 0.002 s 0.002 s 1
rollup-block-root 0.004 s 0.004 s 1
rollup-checkpoint-merge 0.003 s 0.003 s 1
rollup-checkpoint-root-single-block 12.5 s 12.6 s 0.99
rollup-checkpoint-root 12.5 s 12.5 s 1
rollup-root 0.004 s 0.004 s 1
rollup-tx-base-private 0.298 s 0.301 s 0.99
rollup-tx-base-public 0.24 s 0.24 s 1
rollup-tx-merge 0.002 s 0.002 s 1
semaphore-depth-10 0.009 s 0.009 s 1
sha512-100-bytes 0.063 s 0.065 s 0.97

This comment was automatically generated by workflow using github-action-benchmark.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Artifact Size

Details
Benchmark suite Current: 6a0f484 Previous: da35eca Ratio
private-kernel-inner 736.2 KB 736.2 KB 1
private-kernel-reset 2111.5 KB 2111.5 KB 1
private-kernel-tail 549.6 KB 549.6 KB 1
rollup-block-root-first-empty-tx 179.9 KB 179.9 KB 1
rollup-block-root-single-tx 178.2 KB 178.2 KB 1
rollup-block-root 258.2 KB 258.2 KB 1
rollup-checkpoint-merge 373.8 KB 373.8 KB 1
rollup-checkpoint-root-single-block 27645.4 KB 27645.4 KB 1
rollup-checkpoint-root 27690.6 KB 27690.6 KB 1
rollup-root 414.3 KB 414.3 KB 1
rollup-tx-base-private 4920.2 KB 4920.2 KB 1
rollup-tx-base-public 4571.5 KB 4571.5 KB 1
rollup-tx-merge 186.2 KB 186.2 KB 1
semaphore-depth-10 570.7 KB 570.7 KB 1
sha512-100-bytes 506.3 KB 506.3 KB 1

This comment was automatically generated by workflow using github-action-benchmark.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compilation Time

Details
Benchmark suite Current: 6a0f484 Previous: da35eca Ratio
private-kernel-inner 1.796 s 1.766 s 1.02
private-kernel-reset 7.744 s 9.394 s 0.82
private-kernel-tail 1.416 s 1.372 s 1.03
rollup-block-root-first-empty-tx 1.444 s 1.412 s 1.02
rollup-block-root-single-tx 1.37 s 1.42 s 0.96
rollup-block-root 1.47 s 1.48 s 0.99
rollup-checkpoint-merge 1.516 s 1.468 s 1.03
rollup-checkpoint-root-single-block 214 s 223 s 0.96
rollup-checkpoint-root 217 s 210 s 1.03
rollup-root 1.508 s 1.554 s 0.97
rollup-tx-base-private 18.34 s 18.84 s 0.97
rollup-tx-base-public 82.6 s 80.56 s 1.03
rollup-tx-merge 1.42 s 1.444 s 0.98
semaphore-depth-10 0.796 s 0.822 s 0.97
sha512-100-bytes 1.577 s 1.672 s 0.94

This comment was automatically generated by workflow using github-action-benchmark.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Opcode count

Details
Benchmark suite Current: 6a0f484 Previous: da35eca Ratio
private-kernel-inner 15876 opcodes 15876 opcodes 1
private-kernel-reset 78291 opcodes 78291 opcodes 1
private-kernel-tail 12195 opcodes 12195 opcodes 1
rollup-block-root-first-empty-tx 1365 opcodes 1365 opcodes 1
rollup-block-root-single-tx 1049 opcodes 1049 opcodes 1
rollup-block-root 2410 opcodes 2410 opcodes 1
rollup-checkpoint-merge 2330 opcodes 2330 opcodes 1
rollup-checkpoint-root-single-block 962022 opcodes 962022 opcodes 1
rollup-checkpoint-root 963382 opcodes 963382 opcodes 1
rollup-root 2830 opcodes 2830 opcodes 1
rollup-tx-base-private 263910 opcodes 263910 opcodes 1
rollup-tx-base-public 245349 opcodes 245349 opcodes 1
rollup-tx-merge 1486 opcodes 1486 opcodes 1
semaphore-depth-10 5700 opcodes 5700 opcodes 1
sha512-100-bytes 13173 opcodes 13173 opcodes 1

This comment was automatically generated by workflow using github-action-benchmark.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compilation Memory

Details
Benchmark suite Current: 6a0f484 Previous: da35eca Ratio
private-kernel-inner 273.56 MB 273.55 MB 1.00
private-kernel-reset 562.99 MB 562.99 MB 1
private-kernel-tail 256.75 MB 256.78 MB 1.00
rollup-block-root-first-empty-tx 343.29 MB 343.3 MB 1.00
rollup-block-root-single-tx 340.5 MB 340.5 MB 1
rollup-block-root 344.33 MB 344.32 MB 1.00
rollup-checkpoint-merge 344.35 MB 344.35 MB 1
rollup-checkpoint-root-single-block 9710 MB 9710 MB 1
rollup-checkpoint-root 9720 MB 9720 MB 1
rollup-root 346.97 MB 346.97 MB 1
rollup-tx-base-private 1360 MB 1360 MB 1
rollup-tx-base-public 6960 MB 6960 MB 1
rollup-tx-merge 339.37 MB 339.37 MB 1
semaphore_depth_10 97.55 MB 97.55 MB 1
sha512_100_bytes 251.56 MB 251.55 MB 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Execution Memory

Details
Benchmark suite Current: 6a0f484 Previous: da35eca Ratio
private-kernel-inner 255.57 MB 255.57 MB 1
private-kernel-reset 293.11 MB 293.11 MB 1
private-kernel-tail 244.01 MB 244 MB 1.00
rollup-block-root 338.92 MB 338.92 MB 1
rollup-checkpoint-merge 337.79 MB 337.79 MB 1
rollup-checkpoint-root-single-block 1020 MB 1020 MB 1
rollup-checkpoint-root 1020 MB 1020 MB 1
rollup-root 338.99 MB 338.99 MB 1
rollup-tx-base-private 452.47 MB 452.47 MB 1
rollup-tx-base-public 467.36 MB 467.36 MB 1
rollup-tx-merge 337.18 MB 337.18 MB 1
semaphore_depth_10 73.69 MB 73.69 MB 1
sha512_100_bytes 71.96 MB 71.96 MB 1

This comment was automatically generated by workflow using github-action-benchmark.

@asterite asterite requested a review from a team October 9, 2025 10:07
@asterite asterite changed the title chore(ACIRgen): shorter AcirDynamicArray value_types chore(ACIRgen): smaller AcirDynamicArray value_types Oct 9, 2025
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Execution Time'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: e1dab95 Previous: da35eca Ratio
rollup-block-root-single-tx 0.003 s 0.002 s 1.50
rollup-checkpoint-merge 0.004 s 0.003 s 1.33

This comment was automatically generated by workflow using github-action-benchmark.

CC: @TomAFrench

@asterite
Copy link
Collaborator Author

asterite commented Oct 9, 2025

I pushed one more commit because I realized that in slice operations we create a new AcirDynamicArray by computing everything again, but we can take that information from the input slice of those operations. Given that types inside a slice can't change, it's fine to reuse these.

I didn't run tests locally but I think they should still pass.

@asterite
Copy link
Collaborator Author

asterite commented Oct 9, 2025

Hm, nevermind, tests fail... maybe input slices aren't always slices 🤔

@vezenovm
Copy link
Contributor

vezenovm commented Oct 9, 2025

Hm, nevermind, tests fail... maybe input slices aren't always slices 🤔

They can be AcirValue::Array types (e.g., a constant array) instead of a dynamic array. But they will always be slice types.

Copy link
Contributor

@vezenovm vezenovm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice

@asterite asterite enabled auto-merge October 9, 2025 15:30
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ 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: 6a0f484 Previous: da35eca Ratio
test_report_zkpassport_noir-ecdsa_ 2 s 1 s 2

This comment was automatically generated by workflow using github-action-benchmark.

CC: @TomAFrench

@asterite asterite requested a review from aakoshh October 9, 2025 16:34
@asterite asterite added this pull request to the merge queue Oct 9, 2025
Merged via the queue into master with commit 845a8e4 Oct 9, 2025
180 of 182 checks passed
@asterite asterite deleted the ab/acir-shorter-value_types branch October 9, 2025 17:35
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Oct 13, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore: add unit tests for brillig-gen (noir-lang/noir#10130)
chore(ACIR): remove non-ACIR intrinsics during simplification (noir-lang/noir#10145)
fix: Do not carry over `#[fold]` to unconstrained functions during monomorphization (noir-lang/noir#10155)
chore(SSA): avoid consuming self when returning Arc (noir-lang/noir#10147)
fix(ssa): Use `Type::element_size` instead of `Type::flattened_size` for `optimize_length_one_array_read` (noir-lang/noir#10146)
fix(ssa): SSA Interpreter handle overflow by promoting to Field (noir-lang/noir#10097)
chore: Try to optimize compilation memory (noir-lang/noir#10113)
chore(ACIRgen): smaller AcirDynamicArray value_types (noir-lang/noir#10128)
chore(brillig_vm): Re-org integration tests and add a couple more (noir-lang/noir#10129)
chore: unhide `inliner-aggressiveness` option (noir-lang/noir#10137)
chore(brillig_vm): Expand arithmetic int ops tests and add field ops tests (noir-lang/noir#10101)
chore(ACIR): don't override output count in black box function (noir-lang/noir#10123)
chore(test): Add `interpret_execution_failure` tests (noir-lang/noir#9912)
fix(ACIR): correctly display the zero expression (noir-lang/noir#10124)
chore: typos and some refactors in `acvm/src/pwg/mod.rs` (noir-lang/noir#10055)
chore: add brillig_call submodule (noir-lang/noir#10108)
chore(ACIRgen): always compute array offset (noir-lang/noir#10099)
chore: More BTreeSet avoidance (noir-lang/noir#10107)
END_COMMIT_OVERRIDE

Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Oct 13, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore: add unit tests for brillig-gen (noir-lang/noir#10130)
chore(ACIR): remove non-ACIR intrinsics during simplification (noir-lang/noir#10145)
fix: Do not carry over `#[fold]` to unconstrained functions during monomorphization (noir-lang/noir#10155)
chore(SSA): avoid consuming self when returning Arc (noir-lang/noir#10147)
fix(ssa): Use `Type::element_size` instead of `Type::flattened_size` for `optimize_length_one_array_read` (noir-lang/noir#10146)
fix(ssa): SSA Interpreter handle overflow by promoting to Field (noir-lang/noir#10097)
chore: Try to optimize compilation memory (noir-lang/noir#10113)
chore(ACIRgen): smaller AcirDynamicArray value_types (noir-lang/noir#10128)
chore(brillig_vm): Re-org integration tests and add a couple more (noir-lang/noir#10129)
chore: unhide `inliner-aggressiveness` option (noir-lang/noir#10137)
chore(brillig_vm): Expand arithmetic int ops tests and add field ops tests (noir-lang/noir#10101)
chore(ACIR): don't override output count in black box function (noir-lang/noir#10123)
chore(test): Add `interpret_execution_failure` tests (noir-lang/noir#9912)
fix(ACIR): correctly display the zero expression (noir-lang/noir#10124)
chore: typos and some refactors in `acvm/src/pwg/mod.rs` (noir-lang/noir#10055)
chore: add brillig_call submodule (noir-lang/noir#10108)
chore(ACIRgen): always compute array offset (noir-lang/noir#10099)
chore: More BTreeSet avoidance (noir-lang/noir#10107)
END_COMMIT_OVERRIDE
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Oct 13, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore: add unit tests for brillig-gen
(noir-lang/noir#10130)
chore(ACIR): remove non-ACIR intrinsics during simplification
(noir-lang/noir#10145)
fix: Do not carry over `#[fold]` to unconstrained functions during
monomorphization (noir-lang/noir#10155)
chore(SSA): avoid consuming self when returning Arc
(noir-lang/noir#10147)
fix(ssa): Use `Type::element_size` instead of `Type::flattened_size` for
`optimize_length_one_array_read`
(noir-lang/noir#10146)
fix(ssa): SSA Interpreter handle overflow by promoting to Field
(noir-lang/noir#10097)
chore: Try to optimize compilation memory
(noir-lang/noir#10113)
chore(ACIRgen): smaller AcirDynamicArray value_types
(noir-lang/noir#10128)
chore(brillig_vm): Re-org integration tests and add a couple more
(noir-lang/noir#10129)
chore: unhide `inliner-aggressiveness` option
(noir-lang/noir#10137)
chore(brillig_vm): Expand arithmetic int ops tests and add field ops
tests (noir-lang/noir#10101)
chore(ACIR): don't override output count in black box function
(noir-lang/noir#10123)
chore(test): Add `interpret_execution_failure` tests
(noir-lang/noir#9912)
fix(ACIR): correctly display the zero expression
(noir-lang/noir#10124)
chore: typos and some refactors in `acvm/src/pwg/mod.rs`
(noir-lang/noir#10055)
chore: add brillig_call submodule
(noir-lang/noir#10108)
chore(ACIRgen): always compute array offset
(noir-lang/noir#10099)
chore: More BTreeSet avoidance
(noir-lang/noir#10107)
END_COMMIT_OVERRIDE
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Oct 13, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore: add unit tests for brillig-gen
(noir-lang/noir#10130)
chore(ACIR): remove non-ACIR intrinsics during simplification
(noir-lang/noir#10145)
fix: Do not carry over `#[fold]` to unconstrained functions during
monomorphization (noir-lang/noir#10155)
chore(SSA): avoid consuming self when returning Arc
(noir-lang/noir#10147)
fix(ssa): Use `Type::element_size` instead of `Type::flattened_size` for
`optimize_length_one_array_read`
(noir-lang/noir#10146)
fix(ssa): SSA Interpreter handle overflow by promoting to Field
(noir-lang/noir#10097)
chore: Try to optimize compilation memory
(noir-lang/noir#10113)
chore(ACIRgen): smaller AcirDynamicArray value_types
(noir-lang/noir#10128)
chore(brillig_vm): Re-org integration tests and add a couple more
(noir-lang/noir#10129)
chore: unhide `inliner-aggressiveness` option
(noir-lang/noir#10137)
chore(brillig_vm): Expand arithmetic int ops tests and add field ops
tests (noir-lang/noir#10101)
chore(ACIR): don't override output count in black box function
(noir-lang/noir#10123)
chore(test): Add `interpret_execution_failure` tests
(noir-lang/noir#9912)
fix(ACIR): correctly display the zero expression
(noir-lang/noir#10124)
chore: typos and some refactors in `acvm/src/pwg/mod.rs`
(noir-lang/noir#10055)
chore: add brillig_call submodule
(noir-lang/noir#10108)
chore(ACIRgen): always compute array offset
(noir-lang/noir#10099)
chore: More BTreeSet avoidance
(noir-lang/noir#10107)
END_COMMIT_OVERRIDE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bench-show Display benchmark results on PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AcirDynamicArray holds unnecessary value types

3 participants