-
Notifications
You must be signed in to change notification settings - Fork 199
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: avoid unnecessary ssa passes while loop unrolling #6509
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Changes to circuit sizes
🧾 Summary (10% most significant diffs)
Full diff report 👇
|
TomAFrench
force-pushed
the
tf/unroll-function-by-function
branch
from
November 13, 2024 18:12
0b8ba8f
to
13e62bd
Compare
jfecher
approved these changes
Nov 13, 2024
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.
Good catch
AztecBot
added a commit
to AztecProtocol/aztec-packages
that referenced
this pull request
Nov 14, 2024
feat: avoid unnecessary ssa passes while loop unrolling (noir-lang/noir#6509) fix(tests): Use a file lock as well as a mutex to isolate tests cases (noir-lang/noir#6508) fix: set local_module before elaborating each trait (noir-lang/noir#6506) fix: parse Slice type in SSa (noir-lang/noir#6507) fix: perform arithmetic simplification through `CheckedCast` (noir-lang/noir#6502) feat: SSA parser (noir-lang/noir#6489) chore(test): Run test matrix on test_programs (noir-lang/noir#6429) chore(ci): fix cargo deny (noir-lang/noir#6501) feat: Deduplicate instructions across blocks (noir-lang/noir#6499) chore: move tests for arithmetic generics closer to the code (noir-lang/noir#6497) fix(docs): Fix broken links in oracles doc (noir-lang/noir#6488) fix: Treat all parameters as possible aliases of each other (noir-lang/noir#6477) chore: bump rust dependencies (noir-lang/noir#6482) feat: use a full `BlackBoxFunctionSolver` implementation when execution brillig during acirgen (noir-lang/noir#6481) chore(docs): Update How to Oracles (noir-lang/noir#5675) chore: Release Noir(0.38.0) (noir-lang/noir#6422) fix(ssa): Change array_set to not mutate slices coming from function inputs (noir-lang/noir#6463) chore: update example to show how to split public inputs in bash (noir-lang/noir#6472) fix: Discard optimisation that would change execution ordering or that is related to call outputs (noir-lang/noir#6461) chore: proptest for `canonicalize` on infix type expressions (noir-lang/noir#6269) fix: let formatter respect newlines between comments (noir-lang/noir#6458) fix: check infix expression is valid in program input (noir-lang/noir#6450) fix: don't crash on AsTraitPath with empty path (noir-lang/noir#6454) fix(tests): Prevent EOF error while running test programs (noir-lang/noir#6455) fix(sea): mem2reg to treat block input references as alias (noir-lang/noir#6452) chore: revamp attributes (noir-lang/noir#6424) feat!: Always Check Arithmetic Generics at Monomorphization (noir-lang/noir#6329) chore: split path and import lookups (noir-lang/noir#6430) fix(ssa): Resolve value IDs in terminator before comparing to array (noir-lang/noir#6448) fix: right shift is not a regular division (noir-lang/noir#6400)
AztecBot
added a commit
to AztecProtocol/aztec-packages
that referenced
this pull request
Nov 14, 2024
feat: avoid unnecessary ssa passes while loop unrolling (noir-lang/noir#6509) fix(tests): Use a file lock as well as a mutex to isolate tests cases (noir-lang/noir#6508) fix: set local_module before elaborating each trait (noir-lang/noir#6506) fix: parse Slice type in SSa (noir-lang/noir#6507) fix: perform arithmetic simplification through `CheckedCast` (noir-lang/noir#6502) feat: SSA parser (noir-lang/noir#6489) chore(test): Run test matrix on test_programs (noir-lang/noir#6429) chore(ci): fix cargo deny (noir-lang/noir#6501) feat: Deduplicate instructions across blocks (noir-lang/noir#6499) chore: move tests for arithmetic generics closer to the code (noir-lang/noir#6497) fix(docs): Fix broken links in oracles doc (noir-lang/noir#6488) fix: Treat all parameters as possible aliases of each other (noir-lang/noir#6477) chore: bump rust dependencies (noir-lang/noir#6482) feat: use a full `BlackBoxFunctionSolver` implementation when execution brillig during acirgen (noir-lang/noir#6481) chore(docs): Update How to Oracles (noir-lang/noir#5675) chore: Release Noir(0.38.0) (noir-lang/noir#6422) fix(ssa): Change array_set to not mutate slices coming from function inputs (noir-lang/noir#6463) chore: update example to show how to split public inputs in bash (noir-lang/noir#6472) fix: Discard optimisation that would change execution ordering or that is related to call outputs (noir-lang/noir#6461) chore: proptest for `canonicalize` on infix type expressions (noir-lang/noir#6269) fix: let formatter respect newlines between comments (noir-lang/noir#6458) fix: check infix expression is valid in program input (noir-lang/noir#6450) fix: don't crash on AsTraitPath with empty path (noir-lang/noir#6454) fix(tests): Prevent EOF error while running test programs (noir-lang/noir#6455) fix(sea): mem2reg to treat block input references as alias (noir-lang/noir#6452) chore: revamp attributes (noir-lang/noir#6424) feat!: Always Check Arithmetic Generics at Monomorphization (noir-lang/noir#6329) chore: split path and import lookups (noir-lang/noir#6430) fix(ssa): Resolve value IDs in terminator before comparing to array (noir-lang/noir#6448) fix: right shift is not a regular division (noir-lang/noir#6400)
AztecBot
added a commit
to AztecProtocol/aztec-packages
that referenced
this pull request
Nov 14, 2024
…g/noir#6449) chore(ssa): Skip array_set pass for Brillig functions (noir-lang/noir#6513) chore: Reverse ssa parser diff order (noir-lang/noir#6511) chore: Parse negatives in SSA parser (noir-lang/noir#6510) feat: avoid unnecessary ssa passes while loop unrolling (noir-lang/noir#6509) fix(tests): Use a file lock as well as a mutex to isolate tests cases (noir-lang/noir#6508) fix: set local_module before elaborating each trait (noir-lang/noir#6506) fix: parse Slice type in SSa (noir-lang/noir#6507) fix: perform arithmetic simplification through `CheckedCast` (noir-lang/noir#6502) feat: SSA parser (noir-lang/noir#6489) chore(test): Run test matrix on test_programs (noir-lang/noir#6429) chore(ci): fix cargo deny (noir-lang/noir#6501) feat: Deduplicate instructions across blocks (noir-lang/noir#6499) chore: move tests for arithmetic generics closer to the code (noir-lang/noir#6497) fix(docs): Fix broken links in oracles doc (noir-lang/noir#6488) fix: Treat all parameters as possible aliases of each other (noir-lang/noir#6477) chore: bump rust dependencies (noir-lang/noir#6482) feat: use a full `BlackBoxFunctionSolver` implementation when execution brillig during acirgen (noir-lang/noir#6481) chore(docs): Update How to Oracles (noir-lang/noir#5675) chore: Release Noir(0.38.0) (noir-lang/noir#6422) fix(ssa): Change array_set to not mutate slices coming from function inputs (noir-lang/noir#6463) chore: update example to show how to split public inputs in bash (noir-lang/noir#6472) fix: Discard optimisation that would change execution ordering or that is related to call outputs (noir-lang/noir#6461) chore: proptest for `canonicalize` on infix type expressions (noir-lang/noir#6269) fix: let formatter respect newlines between comments (noir-lang/noir#6458) fix: check infix expression is valid in program input (noir-lang/noir#6450) fix: don't crash on AsTraitPath with empty path (noir-lang/noir#6454) fix(tests): Prevent EOF error while running test programs (noir-lang/noir#6455) fix(sea): mem2reg to treat block input references as alias (noir-lang/noir#6452) chore: revamp attributes (noir-lang/noir#6424) feat!: Always Check Arithmetic Generics at Monomorphization (noir-lang/noir#6329) chore: split path and import lookups (noir-lang/noir#6430) fix(ssa): Resolve value IDs in terminator before comparing to array (noir-lang/noir#6448) fix: right shift is not a regular division (noir-lang/noir#6400)
AztecBot
added a commit
to AztecProtocol/aztec-packages
that referenced
this pull request
Nov 14, 2024
chore(ssa): Skip array_set pass for Brillig functions (noir-lang/noir#6513) chore: Reverse ssa parser diff order (noir-lang/noir#6511) chore: Parse negatives in SSA parser (noir-lang/noir#6510) feat: avoid unnecessary ssa passes while loop unrolling (noir-lang/noir#6509) fix(tests): Use a file lock as well as a mutex to isolate tests cases (noir-lang/noir#6508) fix: set local_module before elaborating each trait (noir-lang/noir#6506) fix: parse Slice type in SSa (noir-lang/noir#6507) fix: perform arithmetic simplification through `CheckedCast` (noir-lang/noir#6502) feat: SSA parser (noir-lang/noir#6489) chore(test): Run test matrix on test_programs (noir-lang/noir#6429) chore(ci): fix cargo deny (noir-lang/noir#6501) feat: Deduplicate instructions across blocks (noir-lang/noir#6499) chore: move tests for arithmetic generics closer to the code (noir-lang/noir#6497) fix(docs): Fix broken links in oracles doc (noir-lang/noir#6488) fix: Treat all parameters as possible aliases of each other (noir-lang/noir#6477) chore: bump rust dependencies (noir-lang/noir#6482) feat: use a full `BlackBoxFunctionSolver` implementation when execution brillig during acirgen (noir-lang/noir#6481) chore(docs): Update How to Oracles (noir-lang/noir#5675) chore: Release Noir(0.38.0) (noir-lang/noir#6422) fix(ssa): Change array_set to not mutate slices coming from function inputs (noir-lang/noir#6463) chore: update example to show how to split public inputs in bash (noir-lang/noir#6472) fix: Discard optimisation that would change execution ordering or that is related to call outputs (noir-lang/noir#6461) chore: proptest for `canonicalize` on infix type expressions (noir-lang/noir#6269) fix: let formatter respect newlines between comments (noir-lang/noir#6458) fix: check infix expression is valid in program input (noir-lang/noir#6450) fix: don't crash on AsTraitPath with empty path (noir-lang/noir#6454) fix(tests): Prevent EOF error while running test programs (noir-lang/noir#6455) fix(sea): mem2reg to treat block input references as alias (noir-lang/noir#6452) chore: revamp attributes (noir-lang/noir#6424) feat!: Always Check Arithmetic Generics at Monomorphization (noir-lang/noir#6329) chore: split path and import lookups (noir-lang/noir#6430) fix(ssa): Resolve value IDs in terminator before comparing to array (noir-lang/noir#6448) fix: right shift is not a regular division (noir-lang/noir#6400)
AztecBot
added a commit
to AztecProtocol/aztec-packages
that referenced
this pull request
Nov 14, 2024
…me intepreter (noir-lang/noir#6514) fix: disallow `#[test]` on associated functions (noir-lang/noir#6449) chore(ssa): Skip array_set pass for Brillig functions (noir-lang/noir#6513) chore: Reverse ssa parser diff order (noir-lang/noir#6511) chore: Parse negatives in SSA parser (noir-lang/noir#6510) feat: avoid unnecessary ssa passes while loop unrolling (noir-lang/noir#6509) fix(tests): Use a file lock as well as a mutex to isolate tests cases (noir-lang/noir#6508) fix: set local_module before elaborating each trait (noir-lang/noir#6506) fix: parse Slice type in SSa (noir-lang/noir#6507) fix: perform arithmetic simplification through `CheckedCast` (noir-lang/noir#6502) feat: SSA parser (noir-lang/noir#6489) chore(test): Run test matrix on test_programs (noir-lang/noir#6429) chore(ci): fix cargo deny (noir-lang/noir#6501) feat: Deduplicate instructions across blocks (noir-lang/noir#6499) chore: move tests for arithmetic generics closer to the code (noir-lang/noir#6497) fix(docs): Fix broken links in oracles doc (noir-lang/noir#6488) fix: Treat all parameters as possible aliases of each other (noir-lang/noir#6477) chore: bump rust dependencies (noir-lang/noir#6482) feat: use a full `BlackBoxFunctionSolver` implementation when execution brillig during acirgen (noir-lang/noir#6481) chore(docs): Update How to Oracles (noir-lang/noir#5675) chore: Release Noir(0.38.0) (noir-lang/noir#6422) fix(ssa): Change array_set to not mutate slices coming from function inputs (noir-lang/noir#6463) chore: update example to show how to split public inputs in bash (noir-lang/noir#6472) fix: Discard optimisation that would change execution ordering or that is related to call outputs (noir-lang/noir#6461) chore: proptest for `canonicalize` on infix type expressions (noir-lang/noir#6269) fix: let formatter respect newlines between comments (noir-lang/noir#6458) fix: check infix expression is valid in program input (noir-lang/noir#6450) fix: don't crash on AsTraitPath with empty path (noir-lang/noir#6454) fix(tests): Prevent EOF error while running test programs (noir-lang/noir#6455) fix(sea): mem2reg to treat block input references as alias (noir-lang/noir#6452) chore: revamp attributes (noir-lang/noir#6424) feat!: Always Check Arithmetic Generics at Monomorphization (noir-lang/noir#6329) chore: split path and import lookups (noir-lang/noir#6430) fix(ssa): Resolve value IDs in terminator before comparing to array (noir-lang/noir#6448) fix: right shift is not a regular division (noir-lang/noir#6400)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Problem*
Resolves
Summary*
I noticed that when we're unrolling loops we run 2
mem2reg
passes and asimplify_cfg
on all functions in the program after every failure. This means that we'll end up doing a lot of redundant work on all the other functions in the program as long as there's a single function which is still having loops unrolled.This PR changes how we do loop unrolling so that we unroll a single function to completion before we start unrolling the next. This also opens up the opportunity to parallelize this work in future.
Additional Context
Documentation*
Check one:
PR Checklist*
cargo fmt
on default settings.