Improve ReFinalize::replaceUntaken #7740
Merged
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.
ReFinalize replaces unreachable branches with unreachable blocks so that
it can possibly propagate the unreachability up to the former branch
target. It previously only did this for branches whose sent values (as
opposed to their conditions) were unreachable, except for BrOn, where it
could erroneously optimize when the sent value was reachable and the
descriptor was unreachable. This was incorrect because
replaceUntaken
assumed that the sent value was unreachable.
Rather than fix the bug for BrOn, generalize
replaceUntaken
to workno matter whether the sent value or the other child exists or is the
source of unreachability.