fix(mem2reg): Add the value in ArraySet to aliased_references#8976
fix(mem2reg): Add the value in ArraySet to aliased_references#8976
ArraySet to aliased_references#8976Conversation
ArraySet ArraySet to aliased_references
ArraySet to aliased_referencesArraySet to aliased_references
|
It still fails with ❯ cargo run -q -p nargo_cli -- interpret --force --inliner-aggressiveness 0 --force-brillig --show-ssa-pass "step 6)" --show-ssa-pass "step 7)"
--- Interpreter result after Initial SSA:
Ok([Numeric(U1(true))])
---
--- Interpreter result after Removing Unreachable Functions (step 1):
Ok([Numeric(U1(true))])
---
--- Interpreter result after Defunctionalization (step 2):
Ok([Numeric(U1(true))])
---
--- Interpreter result after Inlining simple functions (step 3):
Ok([Numeric(U1(true))])
---
--- Interpreter result after Removing Paired rc_inc & rc_decs (step 4):
Ok([Numeric(U1(true))])
---
--- Interpreter result after Preprocessing Functions (step 5):
Ok([Numeric(U1(true))])
---
After Inlining (step 6):
brillig(inline) fn main f0 {
b0():
v0 = allocate -> &mut u1
store u1 1 at v0
v2 = make_array [v0] : [&mut u1; 1]
v3 = allocate -> &mut [&mut u1; 1]
store v2 at v3
v4 = allocate -> &mut u1
store u1 0 at v4
v6 = load v3 -> [&mut u1; 1]
v8 = array_set v6, index u32 0, value v4
store v8 at v3
v9 = allocate -> &mut u32
store u32 0 at v9
jmp b1()
b1():
v10 = load v3 -> [&mut u1; 1]
v11 = array_get v10, index u32 0 -> &mut u1
v12 = load v11 -> u1
jmpif v12 then: b2, else: b3
b2():
v13 = load v9 -> u32
v14 = eq v13, u32 0
jmpif v14 then: b4, else: b5
b3():
return u1 1
b4():
jmp b3()
b5():
jmp b1()
}
--- Interpreter result after Inlining (step 6):
Ok([Numeric(U1(true))])
---
After Mem2Reg (step 7):
brillig(inline) fn main f0 {
b0():
v0 = allocate -> &mut u1
v1 = make_array [v0] : [&mut u1; 1]
v2 = allocate -> &mut [&mut u1; 1]
v3 = allocate -> &mut u1
v4 = make_array [v3] : [&mut u1; 1]
store v4 at v2
v5 = allocate -> &mut u32
store u32 0 at v5
jmp b1()
b1():
v7 = load v2 -> [&mut u1; 1]
v8 = array_get v7, index u32 0 -> &mut u1
v9 = load v8 -> u1
jmpif v9 then: b2, else: b3
b2():
v10 = load v5 -> u32
v11 = eq v10, u32 0
jmpif v11 then: b4, else: b5
b3():
return u1 1
b4():
jmp b3()
b5():
jmp b1()
}
--- Interpreter result after Mem2Reg (step 7):
Err(Internal(UninitializedReferenceValueLoaded { value: "*v3 = None" }))
---
The application panicked (crashed).
Message: Expected a non-error result: Internal(UninitializedReferenceValueLoaded { value: "*v3 = None" })
Location: tooling/nargo_cli/src/cli/interpret_cmd.rs:272
This is a bug. We may have already fixed this in newer versions of Nargo so try searching for similar issues at https://github.com/noir-lang/noir/issues/.
If there isn't an open issue for this bug, consider opening one at https://github.com/noir-lang/noir/issues/new?labels=bug&template=bug_report.yml
|
|
In the above SSA, the |
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Execution Memory'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: 00d61e7 | Previous: 8a7046b | Ratio |
|---|---|---|---|
private-kernel-inner |
260.51 MB |
202.19 MB |
1.29 |
private-kernel-reset |
339.03 MB |
225.94 MB |
1.50 |
rollup-base-private |
1190 MB |
507.26 MB |
2.35 |
rollup-base-public |
1350 MB |
440.45 MB |
3.07 |
rollup-block-root |
7180 MB |
1510 MB |
4.75 |
This comment was automatically generated by workflow using github-action-benchmark.
CC: @TomAFrench
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Execution Time'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: 7d49473 | Previous: c686a3e | Ratio |
|---|---|---|---|
rollup-merge |
0.004 s |
0.003 s |
1.33 |
semaphore-depth-10 |
0.028 s |
0.021 s |
1.33 |
This comment was automatically generated by workflow using github-action-benchmark.
CC: @TomAFrench
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Compilation Time'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: 8ea8883 | Previous: 2cfc786 | Ratio |
|---|---|---|---|
private-kernel-reset |
9.566 s |
7.758 s |
1.23 |
This comment was automatically generated by workflow using github-action-benchmark.
CC: @TomAFrench
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Test Suite Duration'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: 13f6998 | Previous: 3838c69 | Ratio |
|---|---|---|---|
test_report_noir-lang_sha512_ |
24 s |
15 s |
1.60 |
This comment was automatically generated by workflow using github-action-benchmark.
CC: @TomAFrench
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE fix: check both coordinates for point doubling (noir-lang/noir#9039) fix: codegen generic type arguments (noir-lang/noir#9044) chore: remove accidentally committed files (noir-lang/noir#9048) fix(fuzz): enable print in comptime_vs_brillig_direct (noir-lang/noir#9045) chore: move a couple of test_utils functions into a module (noir-lang/noir#9052) chore: bump external pinned commits (noir-lang/noir#9046) fix: put constraint failure after binary operations that overflow (noir-lang/noir#9023) fix(ssa): Remove array from cache in constant folding if it's an argument to a `Call` (noir-lang/noir#9040) feat: some `nargo expand` fixes related to function and method calls (noir-lang/noir#9038) feat(ssa_fuzzer): custom mutations (noir-lang/noir#8988) feat: implicit coercion of str and fmtstr into CtString (noir-lang/noir#9032) chore: add idempotency check to `remove_unreachable_functions` (noir-lang/noir#9017) chore: add logging for signature failure cases which break barretenberg (noir-lang/noir#9030) feat(ssa): Handle `println` in the SSA interpreter (noir-lang/noir#9028) chore: don't compute used globals during DIE (noir-lang/noir#9029) fix(ssa_fuzzer): nested conditions in loops (noir-lang/noir#8997) fix(fuzz): Consider `==` turning into `!=` equivalent (noir-lang/noir#9025) fix(fuzz): Avoid overflow in `gen_unary` (noir-lang/noir#9024) fix(ssa): Perform `mem2reg` before DIE (noir-lang/noir#9018) fix: Strange use of predicates in euclidian division (noir-lang/noir#8934) fix: compute the dominance frontier of the reverse cfg using the extended cfg (noir-lang/noir#9019) fix(fuzz): Handle overflow errors from the elaborator (noir-lang/noir#9014) feat: show why an assertion will always fail if it's a static string (noir-lang/noir#9013) chore(ssa): Add `SsaPass:and_then` (noir-lang/noir#9016) fix: Add a remove_unreachable_instructions SSA pass (with unreachable terminator) (noir-lang/noir#9008) feat: `nargo expand` for LSP (noir-lang/noir#9012) fix(mem2reg): Add the value in `ArraySet` to `aliased_references` (noir-lang/noir#8976) feat(debug): Print ssa locations along with ssa (noir-lang/noir#9001) chore: move `nargo expand` code to its own crate (noir-lang/noir#9011) chore: redo typo PR by donatik27 (noir-lang/noir#9004) fix: recover generics when defining trait impl function (noir-lang/noir#9009) fix: replace public key with curve generators in inactive branches (noir-lang/noir#8993) fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode (noir-lang/noir#8996) END_COMMIT_OVERRIDE --------- Co-authored-by: AztecBot <tech@aztecprotocol.com> Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com> Co-authored-by: Ary Borenszweig <asterite@gmail.com>
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore(docs): Brillig VM docs (noir-lang/noir#9078) fix(expand): missing struct member visibility, and use "crate" instead of "super" when possible (noir-lang/noir#9081) fix: revert #9044 (noir-lang/noir#9080) chore: error on infinite recursion (noir-lang/noir#9063) fix(fuzz): Assign to an index variable to sequence side effects (noir-lang/noir#9056) chore: bump cargo deny (noir-lang/noir#9077) chore: Refactor `ConstrainEqFailed` to have `Option<String>` for `msg` (noir-lang/noir#9065) chore(debug): Toggle SSA locations when printing SSA (noir-lang/noir#9066) chore(acir_gen): Improve error message for radix decomposition (noir-lang/noir#9068) chore(ci): fix upload of benchmark results on master (noir-lang/noir#9069) fix: check both coordinates for point doubling (noir-lang/noir#9039) fix: codegen generic type arguments (noir-lang/noir#9044) chore: remove accidentally committed files (noir-lang/noir#9048) fix(fuzz): enable print in comptime_vs_brillig_direct (noir-lang/noir#9045) chore: move a couple of test_utils functions into a module (noir-lang/noir#9052) chore: bump external pinned commits (noir-lang/noir#9046) fix: put constraint failure after binary operations that overflow (noir-lang/noir#9023) fix(ssa): Remove array from cache in constant folding if it's an argument to a `Call` (noir-lang/noir#9040) feat: some `nargo expand` fixes related to function and method calls (noir-lang/noir#9038) feat(ssa_fuzzer): custom mutations (noir-lang/noir#8988) feat: implicit coercion of str and fmtstr into CtString (noir-lang/noir#9032) chore: add idempotency check to `remove_unreachable_functions` (noir-lang/noir#9017) chore: add logging for signature failure cases which break barretenberg (noir-lang/noir#9030) feat(ssa): Handle `println` in the SSA interpreter (noir-lang/noir#9028) chore: don't compute used globals during DIE (noir-lang/noir#9029) fix(ssa_fuzzer): nested conditions in loops (noir-lang/noir#8997) fix(fuzz): Consider `==` turning into `!=` equivalent (noir-lang/noir#9025) fix(fuzz): Avoid overflow in `gen_unary` (noir-lang/noir#9024) fix(ssa): Perform `mem2reg` before DIE (noir-lang/noir#9018) fix: Strange use of predicates in euclidian division (noir-lang/noir#8934) fix: compute the dominance frontier of the reverse cfg using the extended cfg (noir-lang/noir#9019) fix(fuzz): Handle overflow errors from the elaborator (noir-lang/noir#9014) feat: show why an assertion will always fail if it's a static string (noir-lang/noir#9013) chore(ssa): Add `SsaPass:and_then` (noir-lang/noir#9016) fix: Add a remove_unreachable_instructions SSA pass (with unreachable terminator) (noir-lang/noir#9008) feat: `nargo expand` for LSP (noir-lang/noir#9012) fix(mem2reg): Add the value in `ArraySet` to `aliased_references` (noir-lang/noir#8976) feat(debug): Print ssa locations along with ssa (noir-lang/noir#9001) chore: move `nargo expand` code to its own crate (noir-lang/noir#9011) chore: redo typo PR by donatik27 (noir-lang/noir#9004) fix: recover generics when defining trait impl function (noir-lang/noir#9009) fix: replace public key with curve generators in inactive branches (noir-lang/noir#8993) fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode (noir-lang/noir#8996) END_COMMIT_OVERRIDE --------- Co-authored-by: AztecBot <tech@aztecprotocol.com> Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com> Co-authored-by: Ary Borenszweig <asterite@gmail.com>
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore(docs): Brillig VM docs (noir-lang/noir#9078) fix(expand): missing struct member visibility, and use "crate" instead of "super" when possible (noir-lang/noir#9081) fix: revert #9044 (noir-lang/noir#9080) chore: error on infinite recursion (noir-lang/noir#9063) fix(fuzz): Assign to an index variable to sequence side effects (noir-lang/noir#9056) chore: bump cargo deny (noir-lang/noir#9077) chore: Refactor `ConstrainEqFailed` to have `Option<String>` for `msg` (noir-lang/noir#9065) chore(debug): Toggle SSA locations when printing SSA (noir-lang/noir#9066) chore(acir_gen): Improve error message for radix decomposition (noir-lang/noir#9068) chore(ci): fix upload of benchmark results on master (noir-lang/noir#9069) fix: check both coordinates for point doubling (noir-lang/noir#9039) fix: codegen generic type arguments (noir-lang/noir#9044) chore: remove accidentally committed files (noir-lang/noir#9048) fix(fuzz): enable print in comptime_vs_brillig_direct (noir-lang/noir#9045) chore: move a couple of test_utils functions into a module (noir-lang/noir#9052) chore: bump external pinned commits (noir-lang/noir#9046) fix: put constraint failure after binary operations that overflow (noir-lang/noir#9023) fix(ssa): Remove array from cache in constant folding if it's an argument to a `Call` (noir-lang/noir#9040) feat: some `nargo expand` fixes related to function and method calls (noir-lang/noir#9038) feat(ssa_fuzzer): custom mutations (noir-lang/noir#8988) feat: implicit coercion of str and fmtstr into CtString (noir-lang/noir#9032) chore: add idempotency check to `remove_unreachable_functions` (noir-lang/noir#9017) chore: add logging for signature failure cases which break barretenberg (noir-lang/noir#9030) feat(ssa): Handle `println` in the SSA interpreter (noir-lang/noir#9028) chore: don't compute used globals during DIE (noir-lang/noir#9029) fix(ssa_fuzzer): nested conditions in loops (noir-lang/noir#8997) fix(fuzz): Consider `==` turning into `!=` equivalent (noir-lang/noir#9025) fix(fuzz): Avoid overflow in `gen_unary` (noir-lang/noir#9024) fix(ssa): Perform `mem2reg` before DIE (noir-lang/noir#9018) fix: Strange use of predicates in euclidian division (noir-lang/noir#8934) fix: compute the dominance frontier of the reverse cfg using the extended cfg (noir-lang/noir#9019) fix(fuzz): Handle overflow errors from the elaborator (noir-lang/noir#9014) feat: show why an assertion will always fail if it's a static string (noir-lang/noir#9013) chore(ssa): Add `SsaPass:and_then` (noir-lang/noir#9016) fix: Add a remove_unreachable_instructions SSA pass (with unreachable terminator) (noir-lang/noir#9008) feat: `nargo expand` for LSP (noir-lang/noir#9012) fix(mem2reg): Add the value in `ArraySet` to `aliased_references` (noir-lang/noir#8976) feat(debug): Print ssa locations along with ssa (noir-lang/noir#9001) chore: move `nargo expand` code to its own crate (noir-lang/noir#9011) chore: redo typo PR by donatik27 (noir-lang/noir#9004) fix: recover generics when defining trait impl function (noir-lang/noir#9009) fix: replace public key with curve generators in inactive branches (noir-lang/noir#8993) fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode (noir-lang/noir#8996) END_COMMIT_OVERRIDE --------- Co-authored-by: AztecBot <tech@aztecprotocol.com> Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com> Co-authored-by: Ary Borenszweig <asterite@gmail.com>
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore(docs): Brillig VM docs (noir-lang/noir#9078) fix(expand): missing struct member visibility, and use "crate" instead of "super" when possible (noir-lang/noir#9081) fix: revert AztecProtocol#9044 (noir-lang/noir#9080) chore: error on infinite recursion (noir-lang/noir#9063) fix(fuzz): Assign to an index variable to sequence side effects (noir-lang/noir#9056) chore: bump cargo deny (noir-lang/noir#9077) chore: Refactor `ConstrainEqFailed` to have `Option<String>` for `msg` (noir-lang/noir#9065) chore(debug): Toggle SSA locations when printing SSA (noir-lang/noir#9066) chore(acir_gen): Improve error message for radix decomposition (noir-lang/noir#9068) chore(ci): fix upload of benchmark results on master (noir-lang/noir#9069) fix: check both coordinates for point doubling (noir-lang/noir#9039) fix: codegen generic type arguments (noir-lang/noir#9044) chore: remove accidentally committed files (noir-lang/noir#9048) fix(fuzz): enable print in comptime_vs_brillig_direct (noir-lang/noir#9045) chore: move a couple of test_utils functions into a module (noir-lang/noir#9052) chore: bump external pinned commits (noir-lang/noir#9046) fix: put constraint failure after binary operations that overflow (noir-lang/noir#9023) fix(ssa): Remove array from cache in constant folding if it's an argument to a `Call` (noir-lang/noir#9040) feat: some `nargo expand` fixes related to function and method calls (noir-lang/noir#9038) feat(ssa_fuzzer): custom mutations (noir-lang/noir#8988) feat: implicit coercion of str and fmtstr into CtString (noir-lang/noir#9032) chore: add idempotency check to `remove_unreachable_functions` (noir-lang/noir#9017) chore: add logging for signature failure cases which break barretenberg (noir-lang/noir#9030) feat(ssa): Handle `println` in the SSA interpreter (noir-lang/noir#9028) chore: don't compute used globals during DIE (noir-lang/noir#9029) fix(ssa_fuzzer): nested conditions in loops (noir-lang/noir#8997) fix(fuzz): Consider `==` turning into `!=` equivalent (noir-lang/noir#9025) fix(fuzz): Avoid overflow in `gen_unary` (noir-lang/noir#9024) fix(ssa): Perform `mem2reg` before DIE (noir-lang/noir#9018) fix: Strange use of predicates in euclidian division (noir-lang/noir#8934) fix: compute the dominance frontier of the reverse cfg using the extended cfg (noir-lang/noir#9019) fix(fuzz): Handle overflow errors from the elaborator (noir-lang/noir#9014) feat: show why an assertion will always fail if it's a static string (noir-lang/noir#9013) chore(ssa): Add `SsaPass:and_then` (noir-lang/noir#9016) fix: Add a remove_unreachable_instructions SSA pass (with unreachable terminator) (noir-lang/noir#9008) feat: `nargo expand` for LSP (noir-lang/noir#9012) fix(mem2reg): Add the value in `ArraySet` to `aliased_references` (noir-lang/noir#8976) feat(debug): Print ssa locations along with ssa (noir-lang/noir#9001) chore: move `nargo expand` code to its own crate (noir-lang/noir#9011) chore: redo typo PR by donatik27 (noir-lang/noir#9004) fix: recover generics when defining trait impl function (noir-lang/noir#9009) fix: replace public key with curve generators in inactive branches (noir-lang/noir#8993) fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode (noir-lang/noir#8996) END_COMMIT_OVERRIDE --------- Co-authored-by: AztecBot <tech@aztecprotocol.com> Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com> Co-authored-by: Ary Borenszweig <asterite@gmail.com>
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore(docs): Brillig VM docs (noir-lang/noir#9078) fix(expand): missing struct member visibility, and use "crate" instead of "super" when possible (noir-lang/noir#9081) fix: revert #9044 (noir-lang/noir#9080) chore: error on infinite recursion (noir-lang/noir#9063) fix(fuzz): Assign to an index variable to sequence side effects (noir-lang/noir#9056) chore: bump cargo deny (noir-lang/noir#9077) chore: Refactor `ConstrainEqFailed` to have `Option<String>` for `msg` (noir-lang/noir#9065) chore(debug): Toggle SSA locations when printing SSA (noir-lang/noir#9066) chore(acir_gen): Improve error message for radix decomposition (noir-lang/noir#9068) chore(ci): fix upload of benchmark results on master (noir-lang/noir#9069) fix: check both coordinates for point doubling (noir-lang/noir#9039) fix: codegen generic type arguments (noir-lang/noir#9044) chore: remove accidentally committed files (noir-lang/noir#9048) fix(fuzz): enable print in comptime_vs_brillig_direct (noir-lang/noir#9045) chore: move a couple of test_utils functions into a module (noir-lang/noir#9052) chore: bump external pinned commits (noir-lang/noir#9046) fix: put constraint failure after binary operations that overflow (noir-lang/noir#9023) fix(ssa): Remove array from cache in constant folding if it's an argument to a `Call` (noir-lang/noir#9040) feat: some `nargo expand` fixes related to function and method calls (noir-lang/noir#9038) feat(ssa_fuzzer): custom mutations (noir-lang/noir#8988) feat: implicit coercion of str and fmtstr into CtString (noir-lang/noir#9032) chore: add idempotency check to `remove_unreachable_functions` (noir-lang/noir#9017) chore: add logging for signature failure cases which break barretenberg (noir-lang/noir#9030) feat(ssa): Handle `println` in the SSA interpreter (noir-lang/noir#9028) chore: don't compute used globals during DIE (noir-lang/noir#9029) fix(ssa_fuzzer): nested conditions in loops (noir-lang/noir#8997) fix(fuzz): Consider `==` turning into `!=` equivalent (noir-lang/noir#9025) fix(fuzz): Avoid overflow in `gen_unary` (noir-lang/noir#9024) fix(ssa): Perform `mem2reg` before DIE (noir-lang/noir#9018) fix: Strange use of predicates in euclidian division (noir-lang/noir#8934) fix: compute the dominance frontier of the reverse cfg using the extended cfg (noir-lang/noir#9019) fix(fuzz): Handle overflow errors from the elaborator (noir-lang/noir#9014) feat: show why an assertion will always fail if it's a static string (noir-lang/noir#9013) chore(ssa): Add `SsaPass:and_then` (noir-lang/noir#9016) fix: Add a remove_unreachable_instructions SSA pass (with unreachable terminator) (noir-lang/noir#9008) feat: `nargo expand` for LSP (noir-lang/noir#9012) fix(mem2reg): Add the value in `ArraySet` to `aliased_references` (noir-lang/noir#8976) feat(debug): Print ssa locations along with ssa (noir-lang/noir#9001) chore: move `nargo expand` code to its own crate (noir-lang/noir#9011) chore: redo typo PR by donatik27 (noir-lang/noir#9004) fix: recover generics when defining trait impl function (noir-lang/noir#9009) fix: replace public key with curve generators in inactive branches (noir-lang/noir#8993) fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode (noir-lang/noir#8996) END_COMMIT_OVERRIDE --------- Co-authored-by: AztecBot <tech@aztecprotocol.com> Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com> Co-authored-by: Ary Borenszweig <asterite@gmail.com>
Description
Problem*
Resolves #8975
Fixes #8974
I also verified that
NOIR_AST_FUZZER_SEED=0x8d7b02e200001000 cargo test -p noir_ast_fuzzer --test smokeno longer crashes.Summary*
valuetoArraySetto thealiased_references.analyze_instructionso that if the instruction simplifies into aMakeArrayinstruction then it doesn't skip it, because the book keeping might be needed to keep alive stores to references used in the simplified instruction.I'm not sure if this last step would need to be restricted to only a do a subset of the book keeping. What's sure if that if I allowed the analyse to go ahead as it is on all instruction types, then the compiler started crashing.
Additional Context
Originally I thought about adding the value to the
instruction_input_references, but I re-read what @vezenovm commented about why we don't use this technique whenever a variable is an input to an instruction: he suggested that adding to this collection too aggressively would prevent the removal of stores that go into arrays that aren't used.By contrast the
aliased_referencesonly prevents the removal of a store if there are outstanding instructions that rely on the value.In this failure we had an SSA like this:
After
mem2reg, thestore u1 0 at v2was gone, even thoughv6 = array_set v4, index u32 0, value v2clearly usesv2.Documentation*
Check one:
PR Checklist*
cargo fmton default settings.