feat: Use equivalence information from equality assertions to simplify circuit#2378
feat: Use equivalence information from equality assertions to simplify circuit#2378kevaundray merged 3 commits intomasterfrom
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
AcirVars 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 fmton default settings.