Const-fold non-empty span pops#9752
Open
odupontt wants to merge 3 commits intostarkware-libs:mainfrom
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.

This completes the existing const-folding for snapshot pops by propagating the success values of
span.pop_front()andspan.pop_back()when the span is known to be non-empty. The empty case was already optimized and the original implementation left an explicit TODO for the success path, so this change closes a real gap rather than introducing new behavior. Regression tests were added for both non-empty cases.Note
Medium Risk
Changes const-folding control-flow rewriting for
array_snapshot_pop_front/backsuccess paths, which can affect generated lowering and requires correct materialization of tracked values and snapshot/boxing semantics. Scope is localized to the lowering optimizer and covered by new regression tests.Overview
Extends const-folding for
span.pop_front()/span.pop_back()when the span is known non-empty, rewriting the match to jump directly to theSomearm while also propagating both the remaining span and the popped element.Adds
try_materialize_var_infoto synthesize the necessary lowered statements (consts, snapshots, struct/enum construction, boxing, and array rebuild viaarray_new/array_append) when the optimizer needs real variables for trackedVarInfovalues. Updates lowering test data with new regression cases for the non-emptypop_frontandpop_backoptimizations.Written by Cursor Bugbot for commit 13d64b1. This will update automatically on new commits. Configure here.