Skip to content

chore(ssa): Greenlight brillig_entry_points and switch to centralized CallGraph#9668

Merged
vezenovm merged 12 commits intomasterfrom
mv/greenlight-brillig-entry-points
Aug 28, 2025
Merged

chore(ssa): Greenlight brillig_entry_points and switch to centralized CallGraph#9668
vezenovm merged 12 commits intomasterfrom
mv/greenlight-brillig-entry-points

Conversation

@vezenovm
Copy link
Contributor

Description

Problem*

Resolves #9516
Resolves #7228 (this is the last occurrence of an ad-hoc call graph in the SSA)

Summary*

  1. get_brillig_entry_points now uses the centralized CallGraph structure used by inlining
  2. Included a new test for a situation where we do not want to duplicate. Also added an idempotency test
  3. Clarified some comments. This pass already had some pretty in depth doc comments so not much was changed here.

Additional Context

I added the bench-show label to see if the call graph update had any effect.

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 Aug 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: 3302dfc Previous: 515fb42 Ratio
purely_sequential_opcodes 250124 ns/iter (± 193) 250000 ns/iter (± 228) 1.00
perfectly_parallel_opcodes 220970 ns/iter (± 2669) 221411 ns/iter (± 5222) 1.00
perfectly_parallel_batch_inversion_opcodes 2787599 ns/iter (± 3396) 2779566 ns/iter (± 9811) 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: 3302dfc Previous: 515fb42 Ratio
private-kernel-inner 0.016 s 0.016 s 1
private-kernel-reset 0.154 s 0.155 s 0.99
private-kernel-tail 0.011 s 0.01 s 1.10
rollup-base-private 0.263 s 0.263 s 1
rollup-base-public 0.168 s 0.16 s 1.05
rollup-block-root 13 s 13.1 s 0.99
rollup-merge 0.002 s 0.002 s 1
rollup-root 0.004 s 0.004 s 1
semaphore-depth-10 0.019 s 0.019 s 1
sha512-100-bytes 0.098 s 0.101 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.

Compilation Time

Details
Benchmark suite Current: 3302dfc Previous: 515fb42 Ratio
private-kernel-inner 1.83 s 1.756 s 1.04
private-kernel-reset 7.888 s 7.952 s 0.99
private-kernel-tail 1.456 s 1.384 s 1.05
rollup-base-private 15.34 s 15.8 s 0.97
rollup-base-public 13.4 s 13.8 s 0.97
rollup-block-root-empty 21.82 s 21.96 s 0.99
rollup-block-root-single-tx 195 s 210 s 0.93
rollup-block-root 206 s 197 s 1.05
rollup-merge 1.348 s 1.33 s 1.01
rollup-root 1.508 s 1.492 s 1.01
semaphore-depth-10 0.782 s 0.785 s 1.00
sha512-100-bytes 1.546 s 1.586 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.

Opcode count

Details
Benchmark suite Current: 3302dfc Previous: 515fb42 Ratio
private-kernel-inner 14792 opcodes 14792 opcodes 1
private-kernel-reset 68868 opcodes 68868 opcodes 1
private-kernel-tail 11177 opcodes 11177 opcodes 1
rollup-base-private 221335 opcodes 221335 opcodes 1
rollup-base-public 159954 opcodes 159954 opcodes 1
rollup-block-root-empty 68106 opcodes 68106 opcodes 1
rollup-block-root-single-tx 964509 opcodes 964509 opcodes 1
rollup-block-root 965795 opcodes 965795 opcodes 1
rollup-merge 1409 opcodes 1409 opcodes 1
rollup-root 2631 opcodes 2631 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.

Artifact Size

Details
Benchmark suite Current: 3302dfc Previous: 515fb42 Ratio
private-kernel-inner 709.4 KB 709.4 KB 1
private-kernel-reset 2033.2 KB 2033.2 KB 1
private-kernel-tail 537 KB 537 KB 1
rollup-base-private 4320 KB 4320 KB 1
rollup-base-public 3334.6 KB 3334.6 KB 1
rollup-block-root-empty 3855.1 KB 3855.1 KB 1
rollup-block-root-single-tx 30753.8 KB 30753.8 KB 1
rollup-block-root 30786.8 KB 30786.8 KB 1
rollup-merge 188.2 KB 188.2 KB 1
rollup-root 391 KB 391 KB 1
semaphore-depth-10 631.5 KB 631.5 KB 1
sha512-100-bytes 525.5 KB 525.5 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.

Test Suite Duration

Details
Benchmark suite Current: 3302dfc Previous: 515fb42 Ratio
test_report_AztecProtocol_aztec-packages_noir-projects_aztec-nr 100 s 98 s 1.02
test_report_AztecProtocol_aztec-packages_noir-projects_noir-contracts 108 s 109 s 0.99
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_blob 202 s 236 s 0.86
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_private-kernel-lib 218 s 212 s 1.03
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_reset-kernel-lib 33 s 33 s 1
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_rollup-lib 609 s 603 s 1.01
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_types 97 s 99 s 0.98
test_report_noir-lang_noir-bignum_ 140 s 136 s 1.03
test_report_noir-lang_noir_bigcurve_ 328 s 333 s 0.98
test_report_noir-lang_sha256_ 15 s 16 s 0.94
test_report_noir-lang_sha512_ 12 s 12 s 1
test_report_zkpassport_noir-ecdsa_ 1 s 3 s 0.33
test_report_zkpassport_noir_rsa_ 1 s 1 s 1

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

@vezenovm vezenovm requested a review from a team August 28, 2025 16:24
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: 3302dfc Previous: 515fb42 Ratio
private-kernel-inner 240.47 MB 240.56 MB 1.00
private-kernel-reset 550.05 MB 550.05 MB 1
private-kernel-tail 214.94 MB 214.94 MB 1
rollup-base-private 1350 MB 1350 MB 1
rollup-base-public 1400 MB 1400 MB 1
rollup-block-root-empty 1010 MB 1010 MB 1
rollup-block-root-single-tx 9690 MB 9690 MB 1
rollup-block-root 9690 MB 9690 MB 1
rollup-merge 331.51 MB 331.51 MB 1
rollup-root 342.28 MB 342.28 MB 1
semaphore_depth_10 105.65 MB 105.65 MB 1
sha512_100_bytes 234.77 MB 234.79 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: 3302dfc Previous: 515fb42 Ratio
private-kernel-inner 213.88 MB 213.88 MB 1
private-kernel-reset 247.08 MB 247.08 MB 1
private-kernel-tail 198.71 MB 198.71 MB 1
rollup-base-private 502.47 MB 502.47 MB 1
rollup-base-public 434.93 MB 434.93 MB 1
rollup-block-root 1500 MB 1500 MB 1
rollup-merge 329.26 MB 329.26 MB 1
rollup-root 331.79 MB 331.79 MB 1
semaphore_depth_10 70.43 MB 70.43 MB 1
sha512_100_bytes 57.32 MB 57.32 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 'Test Suite Duration'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: 28d60e9 Previous: 48327c0 Ratio
test_report_zkpassport_noir-ecdsa_ 2 s 1 s 2

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

CC: @TomAFrench

@vezenovm vezenovm marked this pull request as draft August 28, 2025 16:58
@vezenovm vezenovm marked this pull request as ready for review August 28, 2025 19:08
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!

Unrelated to this PR but left me wondering... could deduplication can be avoided if a function doesn't use any globals?

@vezenovm
Copy link
Contributor Author

vezenovm commented Aug 28, 2025

Looks good!

Unrelated to this PR but left me wondering... could deduplication can be avoided if a function doesn't use any globals?

I debated that as well but actually reverted it here fb710ca as some of the Brillig gen logic requires that a Brillig function has a singular entry point. We do hoisting of constants to the global memory space when generating Brillig globals. I figured this would be better for a separate PR.

@vezenovm vezenovm enabled auto-merge August 28, 2025 21:24
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: 8989b23 Previous: 48327c0 Ratio
rollup-block-root-single-tx 269 s 192 s 1.40

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

CC: @TomAFrench

@vezenovm vezenovm added this pull request to the merge queue Aug 28, 2025
Merged via the queue into master with commit 585175e Aug 28, 2025
122 checks passed
@vezenovm vezenovm deleted the mv/greenlight-brillig-entry-points branch August 28, 2025 23:17
AztecBot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Sep 2, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore: remove duplicated frontend tests (noir-lang/noir#9706)
chore: remove playwright workaround (noir-lang/noir#9704)
fix(licm): Use `Loop::header` in `Loop::is_fully_executed` (noir-lang/noir#9700)
chore: show which type is invalid as program input (noir-lang/noir#9701)
chore: bump deps (noir-lang/noir#9698)
chore: bump external pinned commits (noir-lang/noir#9693)
chore(licm): Break things up further in LICM (noir-lang/noir#9683)
chore(docs): spinning out bb docs (noir-lang/noir#9402)
fix(ssa)!: Signed shift overflow checks rhs < bit_size (noir-lang/noir#9685)
chore: add extra bitshifts tests (noir-lang/noir#9680)
feat: Propagate purities using SCCs (noir-lang/noir#9672)
chore: break `NodeInterner` into chunks (noir-lang/noir#9674)
fix(formatter): don't revert indentation increase after popping it (noir-lang/noir#9673)
feat: hoist safe casts from loops (noir-lang/noir#9645)
chore: fix clippy warnings (noir-lang/noir#9675)
chore(ssa): Refactor flattening (noir-lang/noir#9663)
chore(ssa): Greenlight `brillig_entry_points` and switch to centralized CallGraph (noir-lang/noir#9668)
chore: add two mem2reg regression tests where references are returned (noir-lang/noir#9670)
fix(mem2reg): reuse existing expression and add missing alias (noir-lang/noir#9664)
chore: add tests for bounded_vec (noir-lang/noir#9576)
chore: redact debug info and file maps from snapshots (noir-lang/noir#9666)
chore: pull out interpreter binary evaluation logic into pure functions (noir-lang/noir#9665)
feat: brillig functions can be pure if they are not entry points (noir-lang/noir#9659)
END_COMMIT_OVERRIDE

Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
AztecBot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Sep 2, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore: remove duplicated frontend tests (noir-lang/noir#9706)
chore: remove playwright workaround (noir-lang/noir#9704)
fix(licm): Use `Loop::header` in `Loop::is_fully_executed` (noir-lang/noir#9700)
chore: show which type is invalid as program input (noir-lang/noir#9701)
chore: bump deps (noir-lang/noir#9698)
chore: bump external pinned commits (noir-lang/noir#9693)
chore(licm): Break things up further in LICM (noir-lang/noir#9683)
chore(docs): spinning out bb docs (noir-lang/noir#9402)
fix(ssa)!: Signed shift overflow checks rhs < bit_size (noir-lang/noir#9685)
chore: add extra bitshifts tests (noir-lang/noir#9680)
feat: Propagate purities using SCCs (noir-lang/noir#9672)
chore: break `NodeInterner` into chunks (noir-lang/noir#9674)
fix(formatter): don't revert indentation increase after popping it (noir-lang/noir#9673)
feat: hoist safe casts from loops (noir-lang/noir#9645)
chore: fix clippy warnings (noir-lang/noir#9675)
chore(ssa): Refactor flattening (noir-lang/noir#9663)
chore(ssa): Greenlight `brillig_entry_points` and switch to centralized CallGraph (noir-lang/noir#9668)
chore: add two mem2reg regression tests where references are returned (noir-lang/noir#9670)
fix(mem2reg): reuse existing expression and add missing alias (noir-lang/noir#9664)
chore: add tests for bounded_vec (noir-lang/noir#9576)
chore: redact debug info and file maps from snapshots (noir-lang/noir#9666)
chore: pull out interpreter binary evaluation logic into pure functions (noir-lang/noir#9665)
feat: brillig functions can be pure if they are not entry points (noir-lang/noir#9659)
END_COMMIT_OVERRIDE
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Sep 2, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore: remove duplicated frontend tests
(noir-lang/noir#9706)
chore: remove playwright workaround
(noir-lang/noir#9704)
fix(licm): Use `Loop::header` in `Loop::is_fully_executed`
(noir-lang/noir#9700)
chore: show which type is invalid as program input
(noir-lang/noir#9701)
chore: bump deps (noir-lang/noir#9698)
chore: bump external pinned commits
(noir-lang/noir#9693)
chore(licm): Break things up further in LICM
(noir-lang/noir#9683)
chore(docs): spinning out bb docs
(noir-lang/noir#9402)
fix(ssa)!: Signed shift overflow checks rhs < bit_size
(noir-lang/noir#9685)
chore: add extra bitshifts tests
(noir-lang/noir#9680)
feat: Propagate purities using SCCs
(noir-lang/noir#9672)
chore: break `NodeInterner` into chunks
(noir-lang/noir#9674)
fix(formatter): don't revert indentation increase after popping it
(noir-lang/noir#9673)
feat: hoist safe casts from loops
(noir-lang/noir#9645)
chore: fix clippy warnings (noir-lang/noir#9675)
chore(ssa): Refactor flattening
(noir-lang/noir#9663)
chore(ssa): Greenlight `brillig_entry_points` and switch to centralized
CallGraph (noir-lang/noir#9668)
chore: add two mem2reg regression tests where references are returned
(noir-lang/noir#9670)
fix(mem2reg): reuse existing expression and add missing alias
(noir-lang/noir#9664)
chore: add tests for bounded_vec
(noir-lang/noir#9576)
chore: redact debug info and file maps from snapshots
(noir-lang/noir#9666)
chore: pull out interpreter binary evaluation logic into pure functions
(noir-lang/noir#9665)
feat: brillig functions can be pure if they are not entry points
(noir-lang/noir#9659)
END_COMMIT_OVERRIDE
mralj 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: remove duplicated frontend tests (noir-lang/noir#9706)
chore: remove playwright workaround (noir-lang/noir#9704)
fix(licm): Use `Loop::header` in `Loop::is_fully_executed` (noir-lang/noir#9700)
chore: show which type is invalid as program input (noir-lang/noir#9701)
chore: bump deps (noir-lang/noir#9698)
chore: bump external pinned commits (noir-lang/noir#9693)
chore(licm): Break things up further in LICM (noir-lang/noir#9683)
chore(docs): spinning out bb docs (noir-lang/noir#9402)
fix(ssa)!: Signed shift overflow checks rhs < bit_size (noir-lang/noir#9685)
chore: add extra bitshifts tests (noir-lang/noir#9680)
feat: Propagate purities using SCCs (noir-lang/noir#9672)
chore: break `NodeInterner` into chunks (noir-lang/noir#9674)
fix(formatter): don't revert indentation increase after popping it (noir-lang/noir#9673)
feat: hoist safe casts from loops (noir-lang/noir#9645)
chore: fix clippy warnings (noir-lang/noir#9675)
chore(ssa): Refactor flattening (noir-lang/noir#9663)
chore(ssa): Greenlight `brillig_entry_points` and switch to centralized CallGraph (noir-lang/noir#9668)
chore: add two mem2reg regression tests where references are returned (noir-lang/noir#9670)
fix(mem2reg): reuse existing expression and add missing alias (noir-lang/noir#9664)
chore: add tests for bounded_vec (noir-lang/noir#9576)
chore: redact debug info and file maps from snapshots (noir-lang/noir#9666)
chore: pull out interpreter binary evaluation logic into pure functions (noir-lang/noir#9665)
feat: brillig functions can be pure if they are not entry points (noir-lang/noir#9659)
END_COMMIT_OVERRIDE
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.

Greenlight brillig_entry_points for audits Consolidate multiple implementations of function call graphs across codebase

2 participants