-
Notifications
You must be signed in to change notification settings - Fork 200
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: simplify explicit equality assertions to assert equality directly #3708
Conversation
Changes to circuit sizes
🧾 Summary (10% most significant diffs)
Full diff report 👇
|
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.
I don't like that we have optimizations taking place only on the assert version of lhs == rhs
, it seems the design of assert is forcing us to duplicate this logic. It also seems like there are bugs stemming from it as well (see: #3740). Maybe we should consider moving back to Instruction::Assert(bool, msg)
, and checking for the equality optimization for assert_eq in acir-gen instead.
One benefit of having a binary rather than unary constraint instruction is that it's easier to use this information to inform simplifications to later SSA instructions. e.g. If I constrain A binary constraint instruction also helps reduce constraints necessary for asserting the equality of more complex types such as arrays as it can be converted into a direct assertion over each field rather than having to construct a predicate first. |
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.
LGTM we can revisit the binary versus unary constrain in a later issue
* master: (25 commits) chore!: Make file manager read-only to the compiler (#3760) feat: Add some traits to the stdlib (#3796) fix: Stop issuing unused variable warnings for variables in trait definitions (#3797) fix(lsp): package resolution on save (#3794) chore: clippy fix (#3793) feat: Remove experimental feature warning for traits (#3783) fix: Allow trait method references from the trait name (#3774) chore: adds a new option only-acir (#3683) feat(lsp): add goto definition for structs (#3718) chore: disable code lens feature of lsp (#3789) chore: moving ordering to category jsons and frontmatters (#3777) chore(ci): use `actions/setup-node` for caching yarn dependencies (#2730) fix: remove `noirc_driver/aztec` feature flag in docker (#3784) chore: remove aztec compile time feature flag (#3596) chore: move debugger tests in submodule (#3780) feat: simplify explicit equality assertions to assert equality directly (#3708) fix(ssa): Handle array arguments to side effectual constrain statements (#3740) feat: add `prelude.nr` (#3693) chore: removing old docs (#3778) feat: avoid overflow checks on boolean multiplication (#3745) ...
* master: (148 commits) feat: add support for writing tracing debug info to file (#3790) chore: clippy fix (#3803) chore(ci): enforce timeouts on build and test workflows (#3804) chore!: remove unused `source-resolver` package (#3791) chore!: Make file manager read-only to the compiler (#3760) feat: Add some traits to the stdlib (#3796) fix: Stop issuing unused variable warnings for variables in trait definitions (#3797) fix(lsp): package resolution on save (#3794) chore: clippy fix (#3793) feat: Remove experimental feature warning for traits (#3783) fix: Allow trait method references from the trait name (#3774) chore: adds a new option only-acir (#3683) feat(lsp): add goto definition for structs (#3718) chore: disable code lens feature of lsp (#3789) chore: moving ordering to category jsons and frontmatters (#3777) chore(ci): use `actions/setup-node` for caching yarn dependencies (#2730) fix: remove `noirc_driver/aztec` feature flag in docker (#3784) chore: remove aztec compile time feature flag (#3596) chore: move debugger tests in submodule (#3780) feat: simplify explicit equality assertions to assert equality directly (#3708) ...
🤖 I have created a release *beep* *boop* --- <details><summary>0.21.0</summary> ## [0.21.0](v0.20.0...v0.21.0) (2023-12-15) ### ⚠ BREAKING CHANGES * remove unused `source-resolver` package ([#3791](#3791)) * Make file manager read-only to the compiler ([#3760](#3760)) ### Features * Add `prelude.nr` ([#3693](#3693)) ([5f0f81f](5f0f81f)) * Add some traits to the stdlib ([#3796](#3796)) ([8e11352](8e11352)) * Add support for writing tracing debug info to file ([#3790](#3790)) ([98a5004](98a5004)) * Allow passing custom foreign call handlers when creating proofs in NoirJS ([#3764](#3764)) ([6076e08](6076e08)) * Allow underscores in integer literals ([#3746](#3746)) ([2c06a64](2c06a64)) * Avoid overflow checks on boolean multiplication ([#3745](#3745)) ([9b5b686](9b5b686)) * Aztec-packages ([#3754](#3754)) ([c043265](c043265)) * Dockerfile to test cargo and JS packages ([#3684](#3684)) ([513d619](513d619)) * Docs landing page with a playground ([#3667](#3667)) ([9a95fbe](9a95fbe)) * Enhance test information output ([#3696](#3696)) ([468fbbc](468fbbc)) * Implement print without newline ([#3650](#3650)) ([9827dfe](9827dfe)) * **lsp:** Add goto definition for locals ([#3705](#3705)) ([9dd465c](9dd465c)) * **lsp:** Add goto definition for structs ([#3718](#3718)) ([a576c5b](a576c5b)) * Optimize out unnecessary truncation instructions ([#3717](#3717)) ([c9c72ae](c9c72ae)) * Remove experimental feature warning for traits ([#3783](#3783)) ([cb52242](cb52242)) * Reorganizing docs to fit diataxis framework ([#3711](#3711)) ([54a1ed5](54a1ed5)) * Simplify explicit equality assertions to assert equality directly ([#3708](#3708)) ([2fc46e2](2fc46e2)) * Speed up transformation of debug messages ([#3815](#3815)) ([2a8af1e](2a8af1e)) ### Bug Fixes * `try_unify` no longer binds types on failure ([#3697](#3697)) ([f03e581](f03e581)) * Add missing assertion to test ([#3765](#3765)) ([bcbe116](bcbe116)) * Add negative integer literals ([#3690](#3690)) ([8b3a68f](8b3a68f)) * Allow trait method references from the trait name ([#3774](#3774)) ([cfa34d4](cfa34d4)) * Deserialize odd length hex literals ([#3747](#3747)) ([4000fb2](4000fb2)) * **docs:** Trigger `update-docs` workflow when the `release-please` PR gets merged and not on every merge to master ([#3677](#3677)) ([9a3d1d2](9a3d1d2)) * Initialise strings as u8 array ([#3682](#3682)) ([8da40b7](8da40b7)) * **lsp:** Package resolution on save ([#3794](#3794)) ([14f2fff](14f2fff)) * Parse negative integer literals ([#3698](#3698)) ([463ab06](463ab06)) * Pub is required on return for entry points ([#3616](#3616)) ([7f1d796](7f1d796)) * Remove `noirc_driver/aztec` feature flag in docker ([#3784](#3784)) ([a48d562](a48d562)) * Remove include-keys option ([#3692](#3692)) ([95d7ce2](95d7ce2)) * Revert chnage to modify version in workspace file for acvm dependencies ([#3673](#3673)) ([0696f75](0696f75)) * Sequence update-lockfile workflow so it gets modified after the ACVM version in the root has been changed ([#3676](#3676)) ([c00cd85](c00cd85)) * **ssa:** Handle array arguments to side effectual constrain statements ([#3740](#3740)) ([028d65e](028d65e)) * Stop cloning Traits! ([#3736](#3736)) ([fcff412](fcff412)) * Stop issuing unused variable warnings for variables in trait definitions ([#3797](#3797)) ([0bb44c3](0bb44c3)) * Unsigned integers cannot be negated ([#3688](#3688)) ([f904ae1](f904ae1)) ### Miscellaneous Chores * Make file manager read-only to the compiler ([#3760](#3760)) ([e3dcc21](e3dcc21)) * Remove unused `source-resolver` package ([#3791](#3791)) ([57d2505](57d2505)) </details> <details><summary>0.37.1</summary> ## [0.37.1](v0.37.0...v0.37.1) (2023-12-15) ### Features * Aztec-packages ([#3754](#3754)) ([c043265](c043265)) * Speed up transformation of debug messages ([#3815](#3815)) ([2a8af1e](2a8af1e)) ### Bug Fixes * Deserialize odd length hex literals ([#3747](#3747)) ([4000fb2](4000fb2)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Description
Problem*
Resolves
Summary*
This PR adds 3 optimisations.
x < 1
gets rewritten asx == 0
for unsigned values ofx
(as this is the only value for whichx < 1
can be true)Additional Context
Documentation*
Check one:
PR Checklist*
cargo fmt
on default settings.