Skip to content

chore(acvm): Optimize logic ops#10222

Merged
vezenovm merged 6 commits intomasterfrom
mv/optimize-logic-ops
Oct 17, 2025
Merged

chore(acvm): Optimize logic ops#10222
vezenovm merged 6 commits intomasterfrom
mv/optimize-logic-ops

Conversation

@vezenovm
Copy link
Contributor

@vezenovm vezenovm commented Oct 16, 2025

Description

Problem*

No issue just something I noticed so decided to do a quick experiment.

I noticed we were reversing our byte array two times in mask_vector_le which came off as totally unnecessary. Also, in FieldElement::to_be_bytes we already compute the LE order then reverse the array to get the big endian bytes. So we were doing a lot of unnecessary reversals.

Summary*

I switched mask_to_le_bytes to fetch the LE representation of the field and simplified mask_vector_le so that it no longer reversed the byte array multiple times.

I added some benchmarks which essentially copied those from under acvm-repo/bn254_blackbox_solver/benches/criterion.rs.

These are the best results I got on master:

test logic_ops/bit_and_8bits ... bench:         428 ns/iter (+/- 15)
test logic_ops/bit_xor_8bits ... bench:         428 ns/iter (+/- 51)
test logic_ops/bit_and_32bits ... bench:         454 ns/iter (+/- 1)
test logic_ops/bit_xor_32bits ... bench:         448 ns/iter (+/- 1)
test logic_ops/bit_and_64bits ... bench:         450 ns/iter (+/- 4)
test logic_ops/bit_xor_64bits ... bench:         445 ns/iter (+/- 3)

On this branch:

test logic_ops/bit_and_8bits ... bench:         346 ns/iter (+/- 2)
test logic_ops/bit_xor_8bits ... bench:         350 ns/iter (+/- 4)
test logic_ops/bit_and_32bits ... bench:         379 ns/iter (+/- 2)
test logic_ops/bit_xor_32bits ... bench:         369 ns/iter (+/- 17)
test logic_ops/bit_and_64bits ... bench:         379 ns/iter (+/- 3)
test logic_ops/bit_xor_64bits ... bench:         367 ns/iter (+/- 2)

I don't expect this to have an effect on most programs but we still see ~15-20% improvement in the benchmarks above.

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.

@vezenovm vezenovm added the bench-show Display benchmark results on PR label Oct 16, 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: 5b2597b Previous: 8d78787 Ratio
purely_sequential_opcodes 261926 ns/iter (± 945) 268193 ns/iter (± 654) 0.98
perfectly_parallel_opcodes 232075 ns/iter (± 2819) 231993 ns/iter (± 2903) 1.00
perfectly_parallel_batch_inversion_opcodes 2797916 ns/iter (± 2412) 2785310 ns/iter (± 1354) 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: 5b2597b Previous: 8d78787 Ratio
test_report_AztecProtocol_aztec-packages_noir-projects_aztec-nr 119 s 119 s 1
test_report_AztecProtocol_aztec-packages_noir-projects_noir-contracts 127 s 128 s 0.99
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_blob 259 s 293 s 0.88
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_private-kernel-lib 233 s 237 s 0.98
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_types 152 s 151 s 1.01
test_report_noir-lang_noir-bignum_ 163 s 165 s 0.99
test_report_noir-lang_noir_bigcurve_ 356 s 326 s 1.09
test_report_noir-lang_sha256_ 15 s 17 s 0.88
test_report_noir-lang_sha512_ 14 s 13 s 1.08
test_report_zkpassport_noir-ecdsa_ 3 s 3 s 1
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.

Opcode count

Details
Benchmark suite Current: 5b2597b Previous: 8d78787 Ratio
private-kernel-inner 14544 opcodes 14544 opcodes 1
private-kernel-reset 70418 opcodes 70418 opcodes 1
private-kernel-tail 11680 opcodes 11680 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 2130 opcodes 2130 opcodes 1
rollup-checkpoint-root-single-block 962022 opcodes 962022 opcodes 1
rollup-checkpoint-root 963382 opcodes 963382 opcodes 1
rollup-root 2630 opcodes 2630 opcodes 1
rollup-tx-base-private 263910 opcodes 263910 opcodes 1
rollup-tx-base-public 245187 opcodes 245187 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.

Execution Time

Details
Benchmark suite Current: 5b2597b Previous: 8d78787 Ratio
private-kernel-inner 0.012 s 0.012 s 1
private-kernel-reset 0.152 s 0.153 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.003 s 0.67
rollup-block-root 0.004 s 0.004 s 1
rollup-checkpoint-merge 0.003 s 0.004 s 0.75
rollup-checkpoint-root-single-block 12.5 s 12.7 s 0.98
rollup-checkpoint-root 12.1 s 12.4 s 0.98
rollup-root 0.004 s 0.005 s 0.80
rollup-tx-base-private 0.305 s 0.339 s 0.90
rollup-tx-base-public 0.241 s 0.238 s 1.01
rollup-tx-merge 0.002 s 0.002 s 1
semaphore-depth-10 0.009 s 0.009 s 1
sha512-100-bytes 0.059 s 0.053 s 1.11

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: 5b2597b Previous: 8d78787 Ratio
private-kernel-inner 1.69 s 1.728 s 0.98
private-kernel-reset 6.736 s 6.824 s 0.99
private-kernel-tail 1.322 s 1.392 s 0.95
rollup-block-root-first-empty-tx 1.382 s 1.492 s 0.93
rollup-block-root-single-tx 1.48 s 1.36 s 1.09
rollup-block-root 1.52 s 1.41 s 1.08
rollup-checkpoint-merge 1.46 s 1.414 s 1.03
rollup-checkpoint-root-single-block 212 s 220 s 0.96
rollup-checkpoint-root 209 s 212 s 0.99
rollup-root 1.476 s 1.518 s 0.97
rollup-tx-base-private 19.38 s 24.42 s 0.79
rollup-tx-base-public 138.8 s 132.8 s 1.05
rollup-tx-merge 1.348 s 1.422 s 0.95
semaphore-depth-10 0.782 s 0.797 s 0.98
sha512-100-bytes 1.542 s 1.531 s 1.01

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.

⚠️ 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: b428c7c Previous: 8d78787 Ratio
rollup-block-root-single-tx 2 s 1.36 s 1.47

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

CC: @TomAFrench

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: 5b2597b Previous: 8d78787 Ratio
private-kernel-inner 265.5 MB 265.5 MB 1
private-kernel-reset 493.18 MB 493.18 MB 1
private-kernel-tail 247.54 MB 247.54 MB 1
rollup-block-root-first-empty-tx 339.97 MB 339.97 MB 1
rollup-block-root-single-tx 337.41 MB 337.41 MB 1
rollup-block-root 340.44 MB 340.44 MB 1
rollup-checkpoint-merge 339.76 MB 339.76 MB 1
rollup-checkpoint-root-single-block 6810 MB 6810 MB 1
rollup-checkpoint-root 6810 MB 6810 MB 1
rollup-root 344.07 MB 344.07 MB 1
rollup-tx-base-private 1050 MB 1050 MB 1
rollup-tx-base-public 2890 MB 2890 MB 1
rollup-tx-merge 337.64 MB 337.64 MB 1
semaphore_depth_10 92.18 MB 92.18 MB 1
sha512_100_bytes 185.46 MB 185.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.

Artifact Size

Details
Benchmark suite Current: 5b2597b Previous: 8d78787 Ratio
private-kernel-inner 714.3 KB 714.3 KB 1
private-kernel-reset 1864.5 KB 1864.5 KB 1
private-kernel-tail 546.2 KB 546.2 KB 1
rollup-block-root-first-empty-tx 179.8 KB 179.8 KB 1
rollup-block-root-single-tx 178.1 KB 178.1 KB 1
rollup-block-root 258.1 KB 258.1 KB 1
rollup-checkpoint-merge 370.6 KB 370.6 KB 1
rollup-checkpoint-root-single-block 27640.9 KB 27640.9 KB 1
rollup-checkpoint-root 27686.8 KB 27686.8 KB 1
rollup-root 411.4 KB 411.4 KB 1
rollup-tx-base-private 4906.9 KB 4906.9 KB 1
rollup-tx-base-public 4555.1 KB 4555.1 KB 1
rollup-tx-merge 186.1 KB 186.1 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.

Execution Memory

Details
Benchmark suite Current: 5b2597b Previous: 8d78787 Ratio
private-kernel-inner 253.63 MB 253.63 MB 1
private-kernel-reset 287.24 MB 287.24 MB 1
private-kernel-tail 243.5 MB 243.5 MB 1
rollup-block-root 337.87 MB 337.87 MB 1
rollup-checkpoint-merge 336.67 MB 336.67 MB 1
rollup-checkpoint-root-single-block 1020 MB 1020 MB 1
rollup-checkpoint-root 1020 MB 1020 MB 1
rollup-root 337.87 MB 337.87 MB 1
rollup-tx-base-private 451.42 MB 451.42 MB 1
rollup-tx-base-public 466.49 MB 466.49 MB 1
rollup-tx-merge 336.13 MB 336.13 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.

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: d6b34af Previous: 8d78787 Ratio
sha512-100-bytes 0.065 s 0.053 s 1.23

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

CC: @TomAFrench

@vezenovm vezenovm marked this pull request as ready for review October 17, 2025 14:16
@vezenovm vezenovm enabled auto-merge October 17, 2025 15:02
@vezenovm vezenovm added this pull request to the merge queue Oct 17, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Oct 17, 2025
@vezenovm vezenovm added this pull request to the merge queue Oct 17, 2025
Merged via the queue into master with commit 53568d3 Oct 17, 2025
134 checks passed
@vezenovm vezenovm deleted the mv/optimize-logic-ops branch October 17, 2025 15:39
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 5, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(frontend): Elaborator assignment unit tests (noir-lang/noir#10362)
fix(elaborator): Keep the status of the outer `unsafe` block if the inner is unnecessary (noir-lang/noir#10361)
chore: Start greenlight of interpreter (noir-lang/noir#10354)
chore: bump bb (noir-lang/noir#10359)
feat: `TypeDefinition::as_type_with_generics` (noir-lang/noir#10315)
fix(elaborator): Create new type variable for each generic kind of `FmtStr` (noir-lang/noir#10349)
chore: require ≥2 `FunctionId`'s in `create_apply_function` (noir-lang/noir#10329)
chore(test): Show that `#[oracle]` can take and return function pointers (noir-lang/noir#10178)
fix: check value of `ArraySet` during `array_set_optimization` (noir-lang/noir#10325)
chore(frontend): Comptime item generation unit tests (noir-lang/noir#10319)
chore: bump external pinned commits (noir-lang/noir#10236)
fix: do not simplify call-data values (noir-lang/noir#10032)
chore: update directory name (noir-lang/noir#10348)
feat: Add `#[must_use]` attribute to promote unused warning to an error (noir-lang/noir#10313)
chore: green light for basic_conditional audit (noir-lang/noir#10134)
chore: add unit tests to show some features of the analysis (noir-lang/noir#10286)
fix(print): Convert `HirType::Function` into `PrintableType::Tuple`  (noir-lang/noir#10189)
chore(frontend): Quoting/unquoting roundtrip testing  (noir-lang/noir#10327)
fix: remove leading stars from block doc comments (noir-lang/noir#10316)
fix: slice push_back when length is not known (noir-lang/noir#10206)
chore: Fix typo in defunctionalize docs (noir-lang/noir#10321)
chore(frontend): Elaborator comptime module docs (noir-lang/noir#10318)
fix: "No size for slice" when using black_box (noir-lang/noir#10312)
chore(audit): Fix vector items offset and other refactors (noir-lang/noir#10294)
chore(audit): Refactors and tests for reg-to-reg movements (noir-lang/noir#10293)
chore: Document each elaborator trait function (noir-lang/noir#10303)
chore(frontend): Elaborator impls documentation and additional tests  (noir-lang/noir#10302)
feat(ACIR): reuse element_type_sizes blocks with the same structure (noir-lang/noir#10231)
feat(SSA): simplify array_get from param (noir-lang/noir#10300)
chore(frontend): Elaborator lazy globals and documentation (noir-lang/noir#10260)
chore: avoid unrolling loop headers twice in unrolling passes (noir-lang/noir#10284)
chore(audit): Refactors in `BrilligGlobals`, `ConstantAllocation` and `VariableLiveness` (noir-lang/noir#10265)
chore: Move variable elaboration to its own file (noir-lang/noir#10285)
chore(ACIR): use u32::MAX for PLACEHOLDER_BRILLIG_INDEX (noir-lang/noir#10287)
feat(github): Add Security Policy (noir-lang/noir#10262)
chore(ACIR): handle TODO in `more_than_eq_var` (noir-lang/noir#10274)
chore(ACIR): document AcirValue (noir-lang/noir#10276)
chore(Brillig): no need to handle ArrayLen intrinsic (noir-lang/noir#10280)
chore(frontend): Split out trait impl setup when defining function meta data  (noir-lang/noir#10271)
feat(LSP): show errors on stdlib files (noir-lang/noir#10283)
chore: typos and some refactors, tests, etc in `noirc_evaluator/src/acir` (noir-lang/noir#10255)
chore(ACIR): handle TODO in radix_decompose (noir-lang/noir#10272)
feat(brillig): Automatic register deallocation (noir-lang/noir#10253)
chore: Add some detail to the trait documentation (noir-lang/noir#10273)
chore(frontend): Elaborator struct collection docs (noir-lang/noir#10266)
chore(ACIR): add a test for OpcodeResolutionError::AcirMainCallAttempted (noir-lang/noir#10254)
fix(ssa-interpreter): Add integer modulus to unfit `Field` if the value comes from a subtraction (noir-lang/noir#10241)
chore(frontend): Elaborator function module (noir-lang/noir#10252)
chore: typos and some refactors, tests, etc in `acvm/src/compiler` (noir-lang/noir#10111)
chore(ACIR): turn "todo" into "unreachable" (noir-lang/noir#10251)
chore(frontend): Elaborator module doc comments (noir-lang/noir#10249)
chore(ACIR): more Circuit, Expression and Opcode parsing (noir-lang/noir#10250)
chore: greenlight Elaborator visibility (noir-lang/noir#10248)
chore(audit): Brillig VM nits (noir-lang/noir#10237)
fix(mem2reg): Update array set value alias set and propagate array get result as alias  (noir-lang/noir#10242)
chore(frontend): Split up traits tests module into submodules (noir-lang/noir#10229)
chore(frontend): HIR printer module for inline macro expansion unit tests  (noir-lang/noir#10232)
chore(frontend): Modularize the Elaborator (noir-lang/noir#10202)
chore: Improve compilation time on `rollup-tx-base-public` (noir-lang/noir#10224)
fix(mem2reg): Updating referenced value invalidate addresses with unknown aliases (noir-lang/noir#10175)
chore(frontend): Re-organize frontend tests  (noir-lang/noir#10221)
chore(ACIR): simpler AsSlice implementation (noir-lang/noir#10214)
chore: clone indexed call results (noir-lang/noir#10140)
chore(acvm): Optimize logic ops (noir-lang/noir#10222)
chore: simplify `x > 0` to `x != 0` for unsigned types in ACIR (noir-lang/noir#10220)
fix(ACIR): correct brillig parameter slice length for dynamic arrays (noir-lang/noir#10198)
chore: redo typo PR by spuradage (noir-lang/noir#10226)
feat: attempt to inline successors in `simplify_cfg` (noir-lang/noir#9608)
chore: remove incremental mutation tests (noir-lang/noir#10212)
chore(ACIR): display/parse memory arrays as b0, b1, etc. (noir-lang/noir#10211)
chore(ACIR): no need to return types in `flatten` (noir-lang/noir#10210)
chore(ACIR): make it clear that modulo is only for signed integers (noir-lang/noir#10209)
chore: document precondition to unrolling SSA pass (noir-lang/noir#10208)
chore(ACIR): better display/parse for blackbox calls (noir-lang/noir#10157)
chore: assume Intrinsic::ArrayLen never reaches ACIR (noir-lang/noir#10201)
chore(ACIR): optimize slice_insert (noir-lang/noir#10164)
chore: add minimal reproductions for Cantina issues + typo fixes (noir-lang/noir#10120)
chore: address clippy warnings (noir-lang/noir#10207)
fix: address off-by-one error when removing casts before constraining to constant (noir-lang/noir#10194)
chore(ACIR): prefer displaying `ASSERT return_value = ...` (noir-lang/noir#10195)
chore: remove if-condition from `array_set_optimization_pre_check` (noir-lang/noir#10193)
chore(ssa_fuzzer): allow brillig fuzz target to work in multi threads (noir-lang/noir#10100)
chore: add incremental mutation testing (noir-lang/noir#10196)
chore: ensure that `useful_instructions` cannot overflow (noir-lang/noir#10173)
END_COMMIT_OVERRIDE

Co-authored-by: benesjan <janbenes1234@gmail.com>
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 5, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(frontend): Elaborator assignment unit tests
(noir-lang/noir#10362)
fix(elaborator): Keep the status of the outer `unsafe` block if the
inner is unnecessary (noir-lang/noir#10361)
chore: Start greenlight of interpreter
(noir-lang/noir#10354)
chore: bump bb (noir-lang/noir#10359)
feat: `TypeDefinition::as_type_with_generics`
(noir-lang/noir#10315)
fix(elaborator): Create new type variable for each generic kind of
`FmtStr` (noir-lang/noir#10349)
chore: require ≥2 `FunctionId`'s in `create_apply_function`
(noir-lang/noir#10329)
chore(test): Show that `#[oracle]` can take and return function pointers
(noir-lang/noir#10178)
fix: check value of `ArraySet` during `array_set_optimization`
(noir-lang/noir#10325)
chore(frontend): Comptime item generation unit tests
(noir-lang/noir#10319)
chore: bump external pinned commits
(noir-lang/noir#10236)
fix: do not simplify call-data values
(noir-lang/noir#10032)
chore: update directory name
(noir-lang/noir#10348)
feat: Add `#[must_use]` attribute to promote unused warning to an error
(noir-lang/noir#10313)
chore: green light for basic_conditional audit
(noir-lang/noir#10134)
chore: add unit tests to show some features of the analysis
(noir-lang/noir#10286)
fix(print): Convert `HirType::Function` into `PrintableType::Tuple`
(noir-lang/noir#10189)
chore(frontend): Quoting/unquoting roundtrip testing
(noir-lang/noir#10327)
fix: remove leading stars from block doc comments
(noir-lang/noir#10316)
fix: slice push_back when length is not known
(noir-lang/noir#10206)
chore: Fix typo in defunctionalize docs
(noir-lang/noir#10321)
chore(frontend): Elaborator comptime module docs
(noir-lang/noir#10318)
fix: "No size for slice" when using black_box
(noir-lang/noir#10312)
chore(audit): Fix vector items offset and other refactors
(noir-lang/noir#10294)
chore(audit): Refactors and tests for reg-to-reg movements
(noir-lang/noir#10293)
chore: Document each elaborator trait function
(noir-lang/noir#10303)
chore(frontend): Elaborator impls documentation and additional tests
(noir-lang/noir#10302)
feat(ACIR): reuse element_type_sizes blocks with the same structure
(noir-lang/noir#10231)
feat(SSA): simplify array_get from param
(noir-lang/noir#10300)
chore(frontend): Elaborator lazy globals and documentation
(noir-lang/noir#10260)
chore: avoid unrolling loop headers twice in unrolling passes
(noir-lang/noir#10284)
chore(audit): Refactors in `BrilligGlobals`, `ConstantAllocation` and
`VariableLiveness` (noir-lang/noir#10265)
chore: Move variable elaboration to its own file
(noir-lang/noir#10285)
chore(ACIR): use u32::MAX for PLACEHOLDER_BRILLIG_INDEX
(noir-lang/noir#10287)
feat(github): Add Security Policy
(noir-lang/noir#10262)
chore(ACIR): handle TODO in `more_than_eq_var`
(noir-lang/noir#10274)
chore(ACIR): document AcirValue
(noir-lang/noir#10276)
chore(Brillig): no need to handle ArrayLen intrinsic
(noir-lang/noir#10280)
chore(frontend): Split out trait impl setup when defining function meta
data (noir-lang/noir#10271)
feat(LSP): show errors on stdlib files
(noir-lang/noir#10283)
chore: typos and some refactors, tests, etc in
`noirc_evaluator/src/acir`
(noir-lang/noir#10255)
chore(ACIR): handle TODO in radix_decompose
(noir-lang/noir#10272)
feat(brillig): Automatic register deallocation
(noir-lang/noir#10253)
chore: Add some detail to the trait documentation
(noir-lang/noir#10273)
chore(frontend): Elaborator struct collection docs
(noir-lang/noir#10266)
chore(ACIR): add a test for OpcodeResolutionError::AcirMainCallAttempted
(noir-lang/noir#10254)
fix(ssa-interpreter): Add integer modulus to unfit `Field` if the value
comes from a subtraction (noir-lang/noir#10241)
chore(frontend): Elaborator function module
(noir-lang/noir#10252)
chore: typos and some refactors, tests, etc in `acvm/src/compiler`
(noir-lang/noir#10111)
chore(ACIR): turn "todo" into "unreachable"
(noir-lang/noir#10251)
chore(frontend): Elaborator module doc comments
(noir-lang/noir#10249)
chore(ACIR): more Circuit, Expression and Opcode parsing
(noir-lang/noir#10250)
chore: greenlight Elaborator visibility
(noir-lang/noir#10248)
chore(audit): Brillig VM nits
(noir-lang/noir#10237)
fix(mem2reg): Update array set value alias set and propagate array get
result as alias (noir-lang/noir#10242)
chore(frontend): Split up traits tests module into submodules
(noir-lang/noir#10229)
chore(frontend): HIR printer module for inline macro expansion unit
tests (noir-lang/noir#10232)
chore(frontend): Modularize the Elaborator
(noir-lang/noir#10202)
chore: Improve compilation time on `rollup-tx-base-public`
(noir-lang/noir#10224)
fix(mem2reg): Updating referenced value invalidate addresses with
unknown aliases (noir-lang/noir#10175)
chore(frontend): Re-organize frontend tests
(noir-lang/noir#10221)
chore(ACIR): simpler AsSlice implementation
(noir-lang/noir#10214)
chore: clone indexed call results
(noir-lang/noir#10140)
chore(acvm): Optimize logic ops
(noir-lang/noir#10222)
chore: simplify `x > 0` to `x != 0` for unsigned types in ACIR
(noir-lang/noir#10220)
fix(ACIR): correct brillig parameter slice length for dynamic arrays
(noir-lang/noir#10198)
chore: redo typo PR by spuradage
(noir-lang/noir#10226)
feat: attempt to inline successors in `simplify_cfg`
(noir-lang/noir#9608)
chore: remove incremental mutation tests
(noir-lang/noir#10212)
chore(ACIR): display/parse memory arrays as b0, b1, etc.
(noir-lang/noir#10211)
chore(ACIR): no need to return types in `flatten`
(noir-lang/noir#10210)
chore(ACIR): make it clear that modulo is only for signed integers
(noir-lang/noir#10209)
chore: document precondition to unrolling SSA pass
(noir-lang/noir#10208)
chore(ACIR): better display/parse for blackbox calls
(noir-lang/noir#10157)
chore: assume Intrinsic::ArrayLen never reaches ACIR
(noir-lang/noir#10201)
chore(ACIR): optimize slice_insert
(noir-lang/noir#10164)
chore: add minimal reproductions for Cantina issues + typo fixes
(noir-lang/noir#10120)
chore: address clippy warnings
(noir-lang/noir#10207)
fix: address off-by-one error when removing casts before constraining to
constant (noir-lang/noir#10194)
chore(ACIR): prefer displaying `ASSERT return_value = ...`
(noir-lang/noir#10195)
chore: remove if-condition from `array_set_optimization_pre_check`
(noir-lang/noir#10193)
chore(ssa_fuzzer): allow brillig fuzz target to work in multi threads
(noir-lang/noir#10100)
chore: add incremental mutation testing
(noir-lang/noir#10196)
chore: ensure that `useful_instructions` cannot overflow
(noir-lang/noir#10173)
END_COMMIT_OVERRIDE
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 5, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(frontend): Elaborator assignment unit tests
(noir-lang/noir#10362)
fix(elaborator): Keep the status of the outer `unsafe` block if the
inner is unnecessary (noir-lang/noir#10361)
chore: Start greenlight of interpreter
(noir-lang/noir#10354)
chore: bump bb (noir-lang/noir#10359)
feat: `TypeDefinition::as_type_with_generics`
(noir-lang/noir#10315)
fix(elaborator): Create new type variable for each generic kind of
`FmtStr` (noir-lang/noir#10349)
chore: require ≥2 `FunctionId`'s in `create_apply_function`
(noir-lang/noir#10329)
chore(test): Show that `#[oracle]` can take and return function pointers
(noir-lang/noir#10178)
fix: check value of `ArraySet` during `array_set_optimization`
(noir-lang/noir#10325)
chore(frontend): Comptime item generation unit tests
(noir-lang/noir#10319)
chore: bump external pinned commits
(noir-lang/noir#10236)
fix: do not simplify call-data values
(noir-lang/noir#10032)
chore: update directory name
(noir-lang/noir#10348)
feat: Add `#[must_use]` attribute to promote unused warning to an error
(noir-lang/noir#10313)
chore: green light for basic_conditional audit
(noir-lang/noir#10134)
chore: add unit tests to show some features of the analysis
(noir-lang/noir#10286)
fix(print): Convert `HirType::Function` into `PrintableType::Tuple`
(noir-lang/noir#10189)
chore(frontend): Quoting/unquoting roundtrip testing
(noir-lang/noir#10327)
fix: remove leading stars from block doc comments
(noir-lang/noir#10316)
fix: slice push_back when length is not known
(noir-lang/noir#10206)
chore: Fix typo in defunctionalize docs
(noir-lang/noir#10321)
chore(frontend): Elaborator comptime module docs
(noir-lang/noir#10318)
fix: "No size for slice" when using black_box
(noir-lang/noir#10312)
chore(audit): Fix vector items offset and other refactors
(noir-lang/noir#10294)
chore(audit): Refactors and tests for reg-to-reg movements
(noir-lang/noir#10293)
chore: Document each elaborator trait function
(noir-lang/noir#10303)
chore(frontend): Elaborator impls documentation and additional tests
(noir-lang/noir#10302)
feat(ACIR): reuse element_type_sizes blocks with the same structure
(noir-lang/noir#10231)
feat(SSA): simplify array_get from param
(noir-lang/noir#10300)
chore(frontend): Elaborator lazy globals and documentation
(noir-lang/noir#10260)
chore: avoid unrolling loop headers twice in unrolling passes
(noir-lang/noir#10284)
chore(audit): Refactors in `BrilligGlobals`, `ConstantAllocation` and
`VariableLiveness` (noir-lang/noir#10265)
chore: Move variable elaboration to its own file
(noir-lang/noir#10285)
chore(ACIR): use u32::MAX for PLACEHOLDER_BRILLIG_INDEX
(noir-lang/noir#10287)
feat(github): Add Security Policy
(noir-lang/noir#10262)
chore(ACIR): handle TODO in `more_than_eq_var`
(noir-lang/noir#10274)
chore(ACIR): document AcirValue
(noir-lang/noir#10276)
chore(Brillig): no need to handle ArrayLen intrinsic
(noir-lang/noir#10280)
chore(frontend): Split out trait impl setup when defining function meta
data (noir-lang/noir#10271)
feat(LSP): show errors on stdlib files
(noir-lang/noir#10283)
chore: typos and some refactors, tests, etc in
`noirc_evaluator/src/acir`
(noir-lang/noir#10255)
chore(ACIR): handle TODO in radix_decompose
(noir-lang/noir#10272)
feat(brillig): Automatic register deallocation
(noir-lang/noir#10253)
chore: Add some detail to the trait documentation
(noir-lang/noir#10273)
chore(frontend): Elaborator struct collection docs
(noir-lang/noir#10266)
chore(ACIR): add a test for OpcodeResolutionError::AcirMainCallAttempted
(noir-lang/noir#10254)
fix(ssa-interpreter): Add integer modulus to unfit `Field` if the value
comes from a subtraction (noir-lang/noir#10241)
chore(frontend): Elaborator function module
(noir-lang/noir#10252)
chore: typos and some refactors, tests, etc in `acvm/src/compiler`
(noir-lang/noir#10111)
chore(ACIR): turn "todo" into "unreachable"
(noir-lang/noir#10251)
chore(frontend): Elaborator module doc comments
(noir-lang/noir#10249)
chore(ACIR): more Circuit, Expression and Opcode parsing
(noir-lang/noir#10250)
chore: greenlight Elaborator visibility
(noir-lang/noir#10248)
chore(audit): Brillig VM nits
(noir-lang/noir#10237)
fix(mem2reg): Update array set value alias set and propagate array get
result as alias (noir-lang/noir#10242)
chore(frontend): Split up traits tests module into submodules
(noir-lang/noir#10229)
chore(frontend): HIR printer module for inline macro expansion unit
tests (noir-lang/noir#10232)
chore(frontend): Modularize the Elaborator
(noir-lang/noir#10202)
chore: Improve compilation time on `rollup-tx-base-public`
(noir-lang/noir#10224)
fix(mem2reg): Updating referenced value invalidate addresses with
unknown aliases (noir-lang/noir#10175)
chore(frontend): Re-organize frontend tests
(noir-lang/noir#10221)
chore(ACIR): simpler AsSlice implementation
(noir-lang/noir#10214)
chore: clone indexed call results
(noir-lang/noir#10140)
chore(acvm): Optimize logic ops
(noir-lang/noir#10222)
chore: simplify `x > 0` to `x != 0` for unsigned types in ACIR
(noir-lang/noir#10220)
fix(ACIR): correct brillig parameter slice length for dynamic arrays
(noir-lang/noir#10198)
chore: redo typo PR by spuradage
(noir-lang/noir#10226)
feat: attempt to inline successors in `simplify_cfg`
(noir-lang/noir#9608)
chore: remove incremental mutation tests
(noir-lang/noir#10212)
chore(ACIR): display/parse memory arrays as b0, b1, etc.
(noir-lang/noir#10211)
chore(ACIR): no need to return types in `flatten`
(noir-lang/noir#10210)
chore(ACIR): make it clear that modulo is only for signed integers
(noir-lang/noir#10209)
chore: document precondition to unrolling SSA pass
(noir-lang/noir#10208)
chore(ACIR): better display/parse for blackbox calls
(noir-lang/noir#10157)
chore: assume Intrinsic::ArrayLen never reaches ACIR
(noir-lang/noir#10201)
chore(ACIR): optimize slice_insert
(noir-lang/noir#10164)
chore: add minimal reproductions for Cantina issues + typo fixes
(noir-lang/noir#10120)
chore: address clippy warnings
(noir-lang/noir#10207)
fix: address off-by-one error when removing casts before constraining to
constant (noir-lang/noir#10194)
chore(ACIR): prefer displaying `ASSERT return_value = ...`
(noir-lang/noir#10195)
chore: remove if-condition from `array_set_optimization_pre_check`
(noir-lang/noir#10193)
chore(ssa_fuzzer): allow brillig fuzz target to work in multi threads
(noir-lang/noir#10100)
chore: add incremental mutation testing
(noir-lang/noir#10196)
chore: ensure that `useful_instructions` cannot overflow
(noir-lang/noir#10173)
END_COMMIT_OVERRIDE
charlielye pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 6, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(frontend): Elaborator assignment unit tests (noir-lang/noir#10362)
fix(elaborator): Keep the status of the outer `unsafe` block if the inner is unnecessary (noir-lang/noir#10361)
chore: Start greenlight of interpreter (noir-lang/noir#10354)
chore: bump bb (noir-lang/noir#10359)
feat: `TypeDefinition::as_type_with_generics` (noir-lang/noir#10315)
fix(elaborator): Create new type variable for each generic kind of `FmtStr` (noir-lang/noir#10349)
chore: require ≥2 `FunctionId`'s in `create_apply_function` (noir-lang/noir#10329)
chore(test): Show that `#[oracle]` can take and return function pointers (noir-lang/noir#10178)
fix: check value of `ArraySet` during `array_set_optimization` (noir-lang/noir#10325)
chore(frontend): Comptime item generation unit tests (noir-lang/noir#10319)
chore: bump external pinned commits (noir-lang/noir#10236)
fix: do not simplify call-data values (noir-lang/noir#10032)
chore: update directory name (noir-lang/noir#10348)
feat: Add `#[must_use]` attribute to promote unused warning to an error (noir-lang/noir#10313)
chore: green light for basic_conditional audit (noir-lang/noir#10134)
chore: add unit tests to show some features of the analysis (noir-lang/noir#10286)
fix(print): Convert `HirType::Function` into `PrintableType::Tuple`  (noir-lang/noir#10189)
chore(frontend): Quoting/unquoting roundtrip testing  (noir-lang/noir#10327)
fix: remove leading stars from block doc comments (noir-lang/noir#10316)
fix: slice push_back when length is not known (noir-lang/noir#10206)
chore: Fix typo in defunctionalize docs (noir-lang/noir#10321)
chore(frontend): Elaborator comptime module docs (noir-lang/noir#10318)
fix: "No size for slice" when using black_box (noir-lang/noir#10312)
chore(audit): Fix vector items offset and other refactors (noir-lang/noir#10294)
chore(audit): Refactors and tests for reg-to-reg movements (noir-lang/noir#10293)
chore: Document each elaborator trait function (noir-lang/noir#10303)
chore(frontend): Elaborator impls documentation and additional tests  (noir-lang/noir#10302)
feat(ACIR): reuse element_type_sizes blocks with the same structure (noir-lang/noir#10231)
feat(SSA): simplify array_get from param (noir-lang/noir#10300)
chore(frontend): Elaborator lazy globals and documentation (noir-lang/noir#10260)
chore: avoid unrolling loop headers twice in unrolling passes (noir-lang/noir#10284)
chore(audit): Refactors in `BrilligGlobals`, `ConstantAllocation` and `VariableLiveness` (noir-lang/noir#10265)
chore: Move variable elaboration to its own file (noir-lang/noir#10285)
chore(ACIR): use u32::MAX for PLACEHOLDER_BRILLIG_INDEX (noir-lang/noir#10287)
feat(github): Add Security Policy (noir-lang/noir#10262)
chore(ACIR): handle TODO in `more_than_eq_var` (noir-lang/noir#10274)
chore(ACIR): document AcirValue (noir-lang/noir#10276)
chore(Brillig): no need to handle ArrayLen intrinsic (noir-lang/noir#10280)
chore(frontend): Split out trait impl setup when defining function meta data  (noir-lang/noir#10271)
feat(LSP): show errors on stdlib files (noir-lang/noir#10283)
chore: typos and some refactors, tests, etc in `noirc_evaluator/src/acir` (noir-lang/noir#10255)
chore(ACIR): handle TODO in radix_decompose (noir-lang/noir#10272)
feat(brillig): Automatic register deallocation (noir-lang/noir#10253)
chore: Add some detail to the trait documentation (noir-lang/noir#10273)
chore(frontend): Elaborator struct collection docs (noir-lang/noir#10266)
chore(ACIR): add a test for OpcodeResolutionError::AcirMainCallAttempted (noir-lang/noir#10254)
fix(ssa-interpreter): Add integer modulus to unfit `Field` if the value comes from a subtraction (noir-lang/noir#10241)
chore(frontend): Elaborator function module (noir-lang/noir#10252)
chore: typos and some refactors, tests, etc in `acvm/src/compiler` (noir-lang/noir#10111)
chore(ACIR): turn "todo" into "unreachable" (noir-lang/noir#10251)
chore(frontend): Elaborator module doc comments (noir-lang/noir#10249)
chore(ACIR): more Circuit, Expression and Opcode parsing (noir-lang/noir#10250)
chore: greenlight Elaborator visibility (noir-lang/noir#10248)
chore(audit): Brillig VM nits (noir-lang/noir#10237)
fix(mem2reg): Update array set value alias set and propagate array get result as alias  (noir-lang/noir#10242)
chore(frontend): Split up traits tests module into submodules (noir-lang/noir#10229)
chore(frontend): HIR printer module for inline macro expansion unit tests  (noir-lang/noir#10232)
chore(frontend): Modularize the Elaborator (noir-lang/noir#10202)
chore: Improve compilation time on `rollup-tx-base-public` (noir-lang/noir#10224)
fix(mem2reg): Updating referenced value invalidate addresses with unknown aliases (noir-lang/noir#10175)
chore(frontend): Re-organize frontend tests  (noir-lang/noir#10221)
chore(ACIR): simpler AsSlice implementation (noir-lang/noir#10214)
chore: clone indexed call results (noir-lang/noir#10140)
chore(acvm): Optimize logic ops (noir-lang/noir#10222)
chore: simplify `x > 0` to `x != 0` for unsigned types in ACIR (noir-lang/noir#10220)
fix(ACIR): correct brillig parameter slice length for dynamic arrays (noir-lang/noir#10198)
chore: redo typo PR by spuradage (noir-lang/noir#10226)
feat: attempt to inline successors in `simplify_cfg` (noir-lang/noir#9608)
chore: remove incremental mutation tests (noir-lang/noir#10212)
chore(ACIR): display/parse memory arrays as b0, b1, etc. (noir-lang/noir#10211)
chore(ACIR): no need to return types in `flatten` (noir-lang/noir#10210)
chore(ACIR): make it clear that modulo is only for signed integers (noir-lang/noir#10209)
chore: document precondition to unrolling SSA pass (noir-lang/noir#10208)
chore(ACIR): better display/parse for blackbox calls (noir-lang/noir#10157)
chore: assume Intrinsic::ArrayLen never reaches ACIR (noir-lang/noir#10201)
chore(ACIR): optimize slice_insert (noir-lang/noir#10164)
chore: add minimal reproductions for Cantina issues + typo fixes (noir-lang/noir#10120)
chore: address clippy warnings (noir-lang/noir#10207)
fix: address off-by-one error when removing casts before constraining to constant (noir-lang/noir#10194)
chore(ACIR): prefer displaying `ASSERT return_value = ...` (noir-lang/noir#10195)
chore: remove if-condition from `array_set_optimization_pre_check` (noir-lang/noir#10193)
chore(ssa_fuzzer): allow brillig fuzz target to work in multi threads (noir-lang/noir#10100)
chore: add incremental mutation testing (noir-lang/noir#10196)
chore: ensure that `useful_instructions` cannot overflow (noir-lang/noir#10173)
END_COMMIT_OVERRIDE

Co-authored-by: benesjan <janbenes1234@gmail.com>
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.

2 participants