performance(sierra-to-casm): Improved stack-tracking algorithm. #9491
+23
−18
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.

Summary
Optimized the stack size calculation in the
ProgramAnnotationsimplementation by using a more efficient approach. The previous implementation used anUnorderedHashSetto track available stack indices, while the new implementation uses a boolean vector to mark available indices, which should be more performant. Additionally, added a special case to handle when the new stack size is zero.Type of change
Please check one:
Why is this change needed?
The previous implementation for calculating stack size in the Sierra-to-CASM compiler used an
UnorderedHashSetto track available stack indices, which is less efficient than using a boolean vector. This change improves performance by replacing the hash set with a vector-based approach that directly marks which indices are available.What was the behavior or documentation before?
The code used an
UnorderedHashSetto collect all available stack indices and then searched for the first missing index to determine the new stack size.What is the behavior or documentation after?
The code now uses a boolean vector to mark available stack indices, which is more efficient. It also adds a special case to handle when the new stack size is zero, avoiding unnecessary calculations.