Skip to content

fix(ssa): Validate checked signed add/sub is followed by a truncate#8706

Merged
vezenovm merged 12 commits intomasterfrom
mv/validate-signed-add-sub
May 29, 2025
Merged

fix(ssa): Validate checked signed add/sub is followed by a truncate#8706
vezenovm merged 12 commits intomasterfrom
mv/validate-signed-add-sub

Conversation

@vezenovm
Copy link
Contributor

Description

Problem*

Resolves #8089

Summary*

I added a post-SSA gen validation method that validates all functions in the SSA. For now the only thing we are validating for is the case listed in the linked issue being resolved.

Additional Context

In general we should consolidate our validation logic into one validation pass. I have captured this into an issue here #8705.

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 requested a review from a team May 28, 2025 19:53
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: 17bb3bd Previous: 89783b6 Ratio
rollup-merge 0.004 s 0.003 s 1.33

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

CC: @TomAFrench

@vezenovm vezenovm added the bench-show Display benchmark results on PR label May 28, 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: cecb843 Previous: 89783b6 Ratio
purely_sequential_opcodes 255572 ns/iter (± 834) 255579 ns/iter (± 358) 1.00
perfectly_parallel_opcodes 224488 ns/iter (± 7051) 223669 ns/iter (± 1825) 1.00
perfectly_parallel_batch_inversion_opcodes 3565248 ns/iter (± 2555) 3564281 ns/iter (± 2088) 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 Time

Details
Benchmark suite Current: 17bb3bd Previous: 89783b6 Ratio
private-kernel-inner 0.029 s 0.028 s 1.04
private-kernel-reset 0.166 s 0.165 s 1.01
private-kernel-tail 0.012 s 0.011 s 1.09
rollup-base-private 0.317 s 0.314 s 1.01
rollup-base-public 0.195 s 0.195 s 1
rollup-block-root 11.5 s 11.3 s 1.02
rollup-merge 0.004 s 0.003 s 1.33
rollup-root 0.009 s 0.009 s 1
semaphore-depth-10 0.02 s 0.019 s 1.05

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: 17bb3bd Previous: 89783b6 Ratio
private-kernel-inner 1133.3 KB 1133.3 KB 1
private-kernel-reset 2156.7 KB 2156.7 KB 1
private-kernel-tail 589 KB 589 KB 1
rollup-base-private 5129.7 KB 5129.7 KB 1
rollup-base-public 4071.2 KB 4071.2 KB 1
rollup-block-root-empty 257 KB 257 KB 1
rollup-block-root-single-tx 25708.1 KB 25708.1 KB 1
rollup-block-root 25715.1 KB 25715.1 KB 1
rollup-merge 183.7 KB 183.7 KB 1
rollup-root 418.6 KB 418.6 KB 1
semaphore-depth-10 636.3 KB 636.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: 17bb3bd Previous: 89783b6 Ratio
private-kernel-inner 2.508 s 2.472 s 1.01
private-kernel-reset 7.092 s 6.796 s 1.04
private-kernel-tail 1.176 s 1.112 s 1.06
rollup-base-private 16.64 s 16.26 s 1.02
rollup-base-public 13.86 s 13.66 s 1.01
rollup-block-root-empty 1.476 s 1.35 s 1.09
rollup-block-root-single-tx 124 s 122 s 1.02
rollup-block-root 126 s 129 s 0.98
rollup-merge 1.184 s 1.176 s 1.01
rollup-root 1.65 s 1.664 s 0.99
semaphore-depth-10 0.845 s 0.828 s 1.02

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: 17bb3bd Previous: 89783b6 Ratio
private-kernel-inner 246.19 MB 246.19 MB 1
private-kernel-reset 270.04 MB 270.04 MB 1
private-kernel-tail 221.33 MB 221.33 MB 1
rollup-base-private 580.06 MB 580.06 MB 1
rollup-base-public 576.38 MB 576.38 MB 1
rollup-block-root 1460 MB 1460 MB 1
rollup-merge 401.73 MB 401.73 MB 1
rollup-root 407.3 MB 407.3 MB 1
semaphore_depth_10 92.96 MB 92.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.

Compilation Memory

Details
Benchmark suite Current: 17bb3bd Previous: 89783b6 Ratio
private-kernel-inner 337.15 MB 337.09 MB 1.00
private-kernel-reset 577.7 MB 577.7 MB 1
private-kernel-tail 236.98 MB 236.97 MB 1.00
rollup-base-private 1470 MB 1470 MB 1
rollup-base-public 1630 MB 1630 MB 1
rollup-block-root-empty 431.72 MB 431.7 MB 1.00
rollup-block-root-single-tx 7240 MB 7240 MB 1
rollup-block-root 7250 MB 7250 MB 1
rollup-merge 415.91 MB 415.91 MB 1
rollup-root 470.22 MB 470.2 MB 1.00
semaphore_depth_10 128.39 MB 128.39 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.

Test Suite Duration

Details
Benchmark suite Current: cecb843 Previous: 89783b6 Ratio
test_report_AztecProtocol_aztec-packages_noir-projects_aztec-nr 65 s 67 s 0.97
test_report_AztecProtocol_aztec-packages_noir-projects_noir-contracts 99 s 98 s 1.01
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_blob 43 s 43 s 1
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_private-kernel-lib 199 s 208 s 0.96
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_rollup-lib 192 s 184 s 1.04
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_types 70 s 71 s 0.99
test_report_noir-lang_noir-bignum_ 382 s 383 s 1.00
test_report_noir-lang_noir_bigcurve_ 269 s 257 s 1.05
test_report_noir-lang_sha512_ 32 s 31 s 1.03
test_report_zkpassport_noir_rsa_ 3 s 2 s 1.50

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

Copy link
Collaborator

@asterite asterite left a comment

Choose a reason for hiding this comment

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

Looks good!

@vezenovm vezenovm enabled auto-merge May 28, 2025 22:09
@vezenovm vezenovm added this pull request to the merge queue May 28, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks May 28, 2025
Copy link
Member

@TomAFrench TomAFrench left a comment

Choose a reason for hiding this comment

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

There's already a assert_valid method on Function, I think we'd want to merge these two.

@vezenovm vezenovm requested a review from TomAFrench May 29, 2025 14:54
@vezenovm
Copy link
Contributor Author

There's already a assert_valid method on Function, I think we'd want to merge these two.

I have moved this into assert_valid. For now I just naively merged the two. Any nice abstractions I was thinking could be left to #8705.

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: cecb843 Previous: 89783b6 Ratio
test_report_zkpassport_noir_rsa_ 3 s 2 s 1.50

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

CC: @TomAFrench

@vezenovm vezenovm added this pull request to the merge queue May 29, 2025
Merged via the queue into master with commit 66f8c6e May 29, 2025
118 checks passed
@vezenovm vezenovm deleted the mv/validate-signed-add-sub branch May 29, 2025 17:52
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Jun 1, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
fix(fmt): correctly format mixed secondary attributes and doc comments
(noir-lang/noir#8735)
fix!: require types for trait impl associated constants
(noir-lang/noir#8734)
fix!: Prevent returning references from if expressions
(noir-lang/noir#8731)
fix: cast signed to u1 follow-up
(noir-lang/noir#8730)
fix: cast signed to u1 (noir-lang/noir#8720)
fix: do not mutate arrays later copied inside other arrays
(noir-lang/noir#8701)
chore: box `AsTraitPath` and `TypePath` in `ExpressionKind`
(noir-lang/noir#8716)
fix: general solution for accessing associated constants
(noir-lang/noir#8417)
fix(ssa): Validate checked signed add/sub is followed by a truncate
(noir-lang/noir#8706)
chore: add pre- and post-check on `array_set` optimization pass
(noir-lang/noir#8714)
fix: merge expr bindings with instantiations bindings during
monomorphization (noir-lang/noir#8713)
fix: better way to do LSP file overrides
(noir-lang/noir#8702)
fix(fmt): correct indentation when formatting long struct patterns
(noir-lang/noir#8711)
fix(fuzz): Prevent breaking/continuing out from let blocks in the AST
fuzzer (noir-lang/noir#8708)
chore: remove override for zero length inputs
(noir-lang/noir#8709)
feat: Replace converging jmpif with empty block destinations with a
single jmp (noir-lang/noir#8613)
feat(cli): Add `nargo interpret` command
(noir-lang/noir#8700)
chore: more 1-tuple printing fixes
(noir-lang/noir#8699)
chore(fuzz): Fuzz the SSA parser
(noir-lang/noir#8647)
fix: (SSA parser) translate blocks in logical order rather than syntax
order (noir-lang/noir#8668)
fix(SSA): show and parse range_check's assert_message
(noir-lang/noir#8652)
chore: Show the step number in the SSA message
(noir-lang/noir#8698)
chore(docs): Add pointers to tests
(noir-lang/noir#8695)
chore(fuzz): Capture comptime print output
(noir-lang/noir#8635)
fix: nargo expand reexports correctly implemented
(noir-lang/noir#8693)
feat(cli): Show multiple SSA passes
(noir-lang/noir#8692)
chore(test): Add regression test for defunctionalize
(noir-lang/noir#8691)
chore: add an assertion when parsing SSA that all functions are
well-formed (noir-lang/noir#8671)
feat!: prevent compiling blake3 hashes which barretenberg cannot prove
(noir-lang/noir#8690)
fix(ssa): Remove the array cache from the function inserter
(noir-lang/noir#8607)
chore: bump external pinned commits
(noir-lang/noir#8684)
chore: reenable fuzzing tests in CI
(noir-lang/noir#8688)
fix: Handle `&mut function` in defunctionalize
(noir-lang/noir#8665)
fix(defunctionalize): Higher order functions (HOF) dynamic dispatch and
HOFs in arrays (noir-lang/noir#8672)
chore(ci): avoid running fuzzer tests in the merge queue
(noir-lang/noir#8664)
fix: Make casts in `comptime` consistent with runtime casts
(noir-lang/noir#8669)
fix: relax connectedness requirement on purity analysis pass
(noir-lang/noir#8667)
fix: always use `u32` for indexing arrays in SSA
(noir-lang/noir#8633)
chore: explicitly pull from `next` branch in aztec-packages
(noir-lang/noir#8660)
chore(fuzz): Build the dictionary from the SSA
(noir-lang/noir#8591)
chore(docs): Remove old versioned docs
(noir-lang/noir#8061)
chore: bump external pinned commits
(noir-lang/noir#8634)
fix(SSA): don't use string literal if byte is "form feed" ('\f')
(noir-lang/noir#8653)
chore(defunctionalize): Add regression test for missing lambda variants
panic (noir-lang/noir#8642)
chore(ci): Do not run ast_fuzzer orig vs. morph in ci
(noir-lang/noir#8646)
fix: disable underflow fix for fields
(noir-lang/noir#8631)
fix: revert "fix: error on unused generic in trait impl
(noir-lang/noir#8395)"
(noir-lang/noir#8636)
fix(ssa interpreter): Default to zero when we have an overflowing shl
(noir-lang/noir#8638)
fix: ensure that purity analysis pass explores all functions
(noir-lang/noir#8452)
feat: acir_formal_proofs (noir-lang/noir#8140)
fix: error on unused generic in trait impl
(noir-lang/noir#8395)
fix(expand): use re-exports for non-visibile items
(noir-lang/noir#8374)
END_COMMIT_OVERRIDE

---------

Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Co-authored-by: Ary Borenszweig <asterite@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.

Signed arithmetic differs between ACIR and Brillig

3 participants