Skip to content
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

chore: Add Instruction::MakeArray to SSA #6071

Merged
merged 22 commits into from
Nov 18, 2024
Merged

chore: Add Instruction::MakeArray to SSA #6071

merged 22 commits into from
Nov 18, 2024

Conversation

jfecher
Copy link
Contributor

@jfecher jfecher commented Sep 17, 2024

Description

Problem*

Resolves #1733

Summary*

Adds a MakeArray instruction to explicitly create a new array. Now no other ValueIds can contain other ValueIds which simplifies a couple passes.

Additional Context

Still working on getting this working in brillig.

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.

@TomAFrench
Copy link
Member

Seems like --show-ssa fixes the compilation failures on the few programs I tried.

@TomAFrench
Copy link
Member

Disabling the normalization of valueids shows that we're deleting instructions in the DIE pass which shouldn't be removed. For example the load instruction when returning arr in quicksort is removed from array_sort.

This is happening because somehow the return value of this function (the loaded value) becomes a Value::Function rather than a Value::Instruction. We only mark return values as used if they're constants, instructions or block params so we end up removing the loaded instruction.

@TomAFrench
Copy link
Member

I've merged in master so that this branch is up to date so will be handing this PR back now.

Copy link
Contributor

github-actions bot commented Oct 9, 2024

Changes to Brillig bytecode sizes

Generated at commit: 262b9f666c60b916f1c9f82004d6cd04376af4c6, compared to commit: 1cad7c887893ebfb5de57a71d7965c8b88158a14

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
databus_two_calldata -47 ✅ -17.41%
databus_composite_calldata -151 ✅ -27.61%
databus -28 ✅ -29.47%
databus_two_calldata_simple -36 ✅ -30.77%

Full diff report 👇
Program Brillig opcodes (+/-) %
brillig_unitialised_arrays 48 (+1) +2.13%
slice_dynamic_index 2,808 (+8) +0.29%
hashmap 27,594 (-8) -0.03%
uhashmap 16,716 (-8) -0.05%
eddsa 11,120 (-15) -0.13%
brillig_slices 715 (-1) -0.14%
regression_5252 4,892 (-9) -0.18%
poseidon_bn254_hash_width_3 5,684 (-12) -0.21%
poseidon_bn254_hash 5,684 (-12) -0.21%
slices 2,318 (-5) -0.22%
poseidonsponge_x5_254 4,494 (-12) -0.27%
tuple_inputs 375 (-2) -0.53%
sha2_byte 3,388 (-22) -0.65%
regression 744 (-5) -0.67%
nested_array_in_slice 1,279 (-10) -0.78%
aes128_encrypt 522 (-5) -0.95%
references 311 (-4) -1.27%
nested_array_dynamic 2,145 (-36) -1.65%
bigint 2,045 (-45) -2.15%
binary_operator_overloading 386 (-9) -2.28%
conditional_regression_661 127 (-3) -2.31%
break_and_continue 56 (-5) -8.20%
regression_3607 44 (-5) -10.20%
databus_two_calldata 223 (-47) -17.41%
databus_composite_calldata 396 (-151) -27.61%
databus 67 (-28) -29.47%
databus_two_calldata_simple 81 (-36) -30.77%

Copy link
Contributor

github-actions bot commented Oct 9, 2024

Changes to circuit sizes

Generated at commit: 262b9f666c60b916f1c9f82004d6cd04376af4c6, compared to commit: 1cad7c887893ebfb5de57a71d7965c8b88158a14

🧾 Summary (10% most significant diffs)

Program ACIR opcodes (+/-) % Circuit size (+/-) %
hashmap -15,782 ✅ -37.95% -41,817 ✅ -39.17%

Full diff report 👇
Program ACIR opcodes (+/-) % Circuit size (+/-) %
hashmap 25,806 (-15,782) -37.95% 64,940 (-41,817) -39.17%

@jfecher jfecher marked this pull request as ready for review October 9, 2024 11:43
@jfecher jfecher requested a review from a team October 9, 2024 11:43
@jfecher
Copy link
Contributor Author

jfecher commented Oct 9, 2024

This is passing all tests now and showing a surprisingly large improvement in the hashmap test but also large regressions in brillig bytecode sizes.

@TomAFrench
Copy link
Member

This is likely due to the fact that constant arrays are no long considered as "constants" by constant_allocation.rs. We're then not hoisting their usage up to avoid multiple initialisations.

@TomAFrench TomAFrench linked an issue Oct 9, 2024 that may be closed by this pull request
@jfecher
Copy link
Contributor Author

jfecher commented Oct 9, 2024

@TomAFrench hmm I tried updating is_constant_value there but doing so just leads to many panics on ValueIds not being available.

Copy link
Contributor

@michaeljklein michaeljklein left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jfecher
Copy link
Contributor Author

jfecher commented Oct 9, 2024

Going to hold off on merging this for a bit due to the brillig size regressions

@vezenovm
Copy link
Contributor

vezenovm commented Oct 9, 2024

Going to hold off on merging this for a bit due to the brillig size regressions

Yeah would be good to avoid this regression.

@sirasistant
Copy link
Contributor

sirasistant commented Oct 21, 2024

This is likely due to the fact that constant arrays are no long considered as "constants" by constant_allocation.rs. We're then not hoisting their usage up to avoid multiple initialisations.

yes, I think that's the issue. For example, in slices, we have patterns like this:

    inc_rc v207
    v208 = make_slice [Field 0, Field 0]
    inc_rc v208
    v209 = eq v0, v1
    v210 = not v209
    jmpif v210 then: b18, else: b17
  b18():
    v212 = eq v0, Field 20
    v213 = not v212
    jmpif v213 then: b20, else: b19
  b20():
    v214 = make_slice [Field 0, Field 0, v1]
    v215 = make_slice [Field 0, Field 0, v1]
    v216 = make_slice [Field 0, Field 0, v1]
    jmp b21(u32 3, v216)
  b21(v10: u32, v11: [Field]):
    jmp b22(v10, v11)
  b22(v12: u32, v13: [Field]):
    inc_rc v13
    v217 = eq v12, u32 3
    constrain v12 == u32 3
    v218 = lt u32 2, v12
    constrain v218 == u1 1 '"Index out of bounds"'
    v219 = array_get v13, index u32 2
    v220 = eq v219, Field 10
    constrain v219 == Field 10
    v221 = make_slice [Field 0, Field 0]

Previously, these immediate slices would have been picked up by constant_allocation and hoisted to just 1 single initialization. Now, since array constant initialization has been promoted to a instruction, we actually need to do at the ssa level what constant allocation was doing outside SSA. So in order to avoid any regression we need to identify payloads to make_array that are equal to each other and hoist the make_array to the common dominator of all the arrays that are equal.

Also, if all the values are immediates constant_allocation was hoisting them out of loops to avoid extra runtime cost. But that won't affect bytecode size

@jfecher
Copy link
Contributor Author

jfecher commented Nov 12, 2024

fold_2_to_17 -130,344,860 ✅ -99.15%
bench_2_to_17 -144,084,489 ✅ -99.58%

How about this for brillig improvements 😅

@jfecher
Copy link
Contributor Author

jfecher commented Nov 12, 2024

Unfortunately the actual brillig bytecode size is still a bit bigger and most brillig programs still execute more opcodes 🤔

Edit: some of them, like brillig_slices may be because of the lack of the array hoisting optimization. The array deduplication check in constant folding doesn't simplify these since they're all in else branches so there's no single case of these that is in a black which dominates all the others. Fixing this seems somewhat difficult since it'd require checking every element of the array, checking which blocks they were defined in, and trying to hoist to the earliest one. Although doing so could potentially lead to more work if those else blocks were never executed and we hoist out of the if.

@sirasistant
Copy link
Contributor

sirasistant commented Nov 14, 2024

Although doing so could potentially lead to more work if those else blocks were never executed and we hoist out of the if

Maybe we could hoist out of loops? that one should always lead to better perf I think

@jfecher
Copy link
Contributor Author

jfecher commented Nov 15, 2024

Ended up merging this with the smaller version of the "move instruction to common dominator block" change since the larger, recursive version was failing a few programs.

The diffs now are generally more positive. Executed opcodes can be better or worse depending on the test.

@jfecher jfecher added this pull request to the merge queue Nov 15, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Nov 15, 2024
compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs Outdated Show resolved Hide resolved
compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs Outdated Show resolved Hide resolved
compiler/noirc_evaluator/src/ssa/ir/dfg.rs Show resolved Hide resolved
jfecher and others added 2 commits November 18, 2024 10:03
Co-authored-by: Maxim Vezenov <mvezenov@gmail.com>
Co-authored-by: Maxim Vezenov <mvezenov@gmail.com>
@jfecher jfecher added this pull request to the merge queue Nov 18, 2024
Merged via the queue into master with commit 2d999f0 Nov 18, 2024
49 checks passed
@jfecher jfecher deleted the jf/make-array branch November 18, 2024 16:20
TomAFrench added a commit that referenced this pull request Nov 18, 2024
* master:
  fix: take blackbox function outputs into account when merging expressions (#6532)
  chore: Add `Instruction::MakeArray` to SSA (#6071)
  feat(profiler): Reduce memory in Brillig execution flamegraph (#6538)
  chore: convert some tests to use SSA parser (#6543)
TomAFrench added a commit that referenced this pull request Nov 18, 2024
* master:
  fix: take blackbox function outputs into account when merging expressions (#6532)
  chore: Add `Instruction::MakeArray` to SSA (#6071)
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 18, 2024
…r#6534)

fix: take blackbox function outputs into account when merging expressions (noir-lang/noir#6532)
chore: Add `Instruction::MakeArray` to SSA (noir-lang/noir#6071)
feat(profiler): Reduce memory in Brillig execution flamegraph (noir-lang/noir#6538)
chore: convert some tests to use SSA parser (noir-lang/noir#6543)
chore(ci): bump mac github runner image to `macos-14` (noir-lang/noir#6545)
chore(test): More descriptive labels in test matrix (noir-lang/noir#6542)
chore: Remove unused methods from implicit numeric generics (noir-lang/noir#6541)
fix: Fix poor handling of aliased references in flattening pass causing some values to be zeroed (noir-lang/noir#6434)
fix: allow range checks to be performed within the comptime 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)
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 19, 2024
…ir#6523)

chore: restructure `noirc_evaluator` crate (noir-lang/noir#6534)
fix: take blackbox function outputs into account when merging expressions (noir-lang/noir#6532)
chore: Add `Instruction::MakeArray` to SSA (noir-lang/noir#6071)
feat(profiler): Reduce memory in Brillig execution flamegraph (noir-lang/noir#6538)
chore: convert some tests to use SSA parser (noir-lang/noir#6543)
chore(ci): bump mac github runner image to `macos-14` (noir-lang/noir#6545)
chore(test): More descriptive labels in test matrix (noir-lang/noir#6542)
chore: Remove unused methods from implicit numeric generics (noir-lang/noir#6541)
fix: Fix poor handling of aliased references in flattening pass causing some values to be zeroed (noir-lang/noir#6434)
fix: allow range checks to be performed within the comptime 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)
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 19, 2024
chore: restructure `noirc_evaluator` crate (noir-lang/noir#6534)
fix: take blackbox function outputs into account when merging expressions (noir-lang/noir#6532)
chore: Add `Instruction::MakeArray` to SSA (noir-lang/noir#6071)
feat(profiler): Reduce memory in Brillig execution flamegraph (noir-lang/noir#6538)
chore: convert some tests to use SSA parser (noir-lang/noir#6543)
chore(ci): bump mac github runner image to `macos-14` (noir-lang/noir#6545)
chore(test): More descriptive labels in test matrix (noir-lang/noir#6542)
chore: Remove unused methods from implicit numeric generics (noir-lang/noir#6541)
fix: Fix poor handling of aliased references in flattening pass causing some values to be zeroed (noir-lang/noir#6434)
fix: allow range checks to be performed within the comptime 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)
TomAFrench added a commit that referenced this pull request Nov 19, 2024
* master: (65 commits)
  chore: remove some `_else_condition` tech debt (#6522)
  chore: revert #6375 (#6552)
  feat: simplify constant MSM calls in SSA (#6547)
  chore(test): Remove duplicate brillig tests (#6523)
  chore: restructure `noirc_evaluator` crate (#6534)
  fix: take blackbox function outputs into account when merging expressions (#6532)
  chore: Add `Instruction::MakeArray` to SSA (#6071)
  feat(profiler): Reduce memory in Brillig execution flamegraph (#6538)
  chore: convert some tests to use SSA parser (#6543)
  chore(ci): bump mac github runner image to `macos-14` (#6545)
  chore(test): More descriptive labels in test matrix (#6542)
  chore: Remove unused methods from implicit numeric generics (#6541)
  fix: Fix poor handling of aliased references in flattening pass causing some values to be zeroed (#6434)
  fix: allow range checks to be performed within the comptime intepreter (#6514)
  fix: disallow `#[test]` on associated functions (#6449)
  chore(ssa): Skip array_set pass for Brillig functions (#6513)
  chore: Reverse ssa parser diff order (#6511)
  chore: Parse negatives in SSA parser (#6510)
  feat: avoid unnecessary ssa passes while loop unrolling (#6509)
  fix(tests): Use a file lock as well as a mutex to isolate tests cases (#6508)
  ...
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 19, 2024
feat(ssa): Unroll small loops in brillig (noir-lang/noir#6505)
fix: Do a shallow follow_bindings before unification (noir-lang/noir#6558)
chore: remove some `_else_condition` tech debt (noir-lang/noir#6522)
chore: revert #6375 (noir-lang/noir#6552)
feat: simplify constant MSM calls in SSA (noir-lang/noir#6547)
chore(test): Remove duplicate brillig tests (noir-lang/noir#6523)
chore: restructure `noirc_evaluator` crate (noir-lang/noir#6534)
fix: take blackbox function outputs into account when merging expressions (noir-lang/noir#6532)
chore: Add `Instruction::MakeArray` to SSA (noir-lang/noir#6071)
feat(profiler): Reduce memory in Brillig execution flamegraph (noir-lang/noir#6538)
chore: convert some tests to use SSA parser (noir-lang/noir#6543)
chore(ci): bump mac github runner image to `macos-14` (noir-lang/noir#6545)
chore(test): More descriptive labels in test matrix (noir-lang/noir#6542)
chore: Remove unused methods from implicit numeric generics (noir-lang/noir#6541)
fix: Fix poor handling of aliased references in flattening pass causing some values to be zeroed (noir-lang/noir#6434)
fix: allow range checks to be performed within the comptime 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
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

keccakf1600 instructions aren't being deduplicated as expected Add MakeArray instruction to the ssa refactor
6 participants