-
Notifications
You must be signed in to change notification settings - Fork 204
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: Use equivalence information from equality assertions to simplify circuit #2378
Conversation
3f6e4ed
to
c18e6c1
Compare
97456e9
to
c66130d
Compare
crates/noirc_evaluator/src/ssa/acir_gen/acir_ir/acir_variable.rs
Outdated
Show resolved
Hide resolved
Should this be an SSA pass instead? It seems our acir-gen pass is getting increasingly complex as we add more optimizations to it. |
Hmm. I agree it would be best to make this an SSA pass as we're be able to use the information on the two |
It's a bit more difficult to do this in SSA as it doesn't know the difference between a value which is a single witness and a value which is a complicated expression. I think that making an SSA pass to correctly handle this program may be difficult.
If we do it in acir-gen then we can easily see that |
I'd think checking whether x is a block param and whether yz is an instruction result could be sufficient, but it doesn't need to block this PR. An SSA pass would be a larger code change as well. |
* master: fix(acir): Attach locations to MemoryOps in ACIR (#2389) feat: Use equivalence information from equality assertions to simplify circuit (#2378) chore: fix body expr span (#2402) feat(attributes): enable custom attributes (#2395) chore: Remove `serde` from `noirc_frontend` (#2390) chore: allow parenthesizing in two type locations (#2388) chore(ci): automatically delete cache entries associated with closed PRs (#2342)
* master: (34 commits) chore: Decouple `noirc_abi` from frontend by introducing `PrintableType` (#2373) feat(brillig): Added locations for brillig artifacts (#2415) feat: Report compilation warnings before errors (#2398) chore: Rework `CrateGraph` to only have one root crate (#2391) chore: clippy fix (#2408) chore(deps): bump rustls-webpki from 0.101.1 to 0.101.4 (#2404) fix(acir): Attach locations to MemoryOps in ACIR (#2389) feat: Use equivalence information from equality assertions to simplify circuit (#2378) chore: fix body expr span (#2402) feat(attributes): enable custom attributes (#2395) chore: Remove `serde` from `noirc_frontend` (#2390) chore: allow parenthesizing in two type locations (#2388) chore(ci): automatically delete cache entries associated with closed PRs (#2342) feat: Perform more checks for compile-time arithmetic (#2380) chore: Remove `noirc_abi::FunctionSignature` and define in terms of HIR (#2372) feat: Update to `acvm` 0.22.0 (#2363) chore: Update committed ACIR artifacts (#2376) feat(ssa): Merge slices in if statements with witness conditions (#2347) chore: Separate frontend `Visibility` and `Distinctness` from the ABI (#2369) feat: add syntax for specifying function type environments (#2357) ...
Description
Problem*
Partially resolves #1431
Summary*
When we assert two
AcirVar
s are equal, we now use this equivalence to use the simpler of the two values in future.This PR will be a lot more useful once #2137 is merged as currently all of our assertions are against
1
.Documentation
This PR requires documentation updates when merged.
Additional Context
PR Checklist*
cargo fmt
on default settings.