chore: Optimize mutating arrays in if statements #4695
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Problem*
Resolves #4692
Summary*
Tries to make merging of array values during flattening smarter by keeping track of only which indices may change.
Note that pinning which indices actually change is much more difficult since these arrays are in references which are loaded from and stored to. This'd require mem2reg and alias analysis to do. So I instead opted for an approximation: we track which indices are changed for each array type within an if branch instead.
If the indices that may be stored to are known, and this list is less than the array's length, then we store to only these indices instead.
Additional Context
Documentation*
Check one:
PR Checklist*
cargo fmt
on default settings.