Do not continue to merge back cold path if guard2 block has been removed #7297
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.
changeBranchDestination
tries to remove unreachable blocks after theremoval of the old edge from guard2 to cold2. Rarely, a previous
transformation in this pass could have made guard2Block unreachable
without removing it, in which case it might have been removed just now.
Normally, if all relevant blocks are removed, later
moveBlockAfterDest
will not cause any issue since it will be just moving around all
unreachable blocks. However, in an even more rare case, if some of the
blocks are removed and some of them are not (eg, guard2Block and the
previous block of guard2Block are removed but the next block of
guard2Block is still valid),
moveBlockAfterDest
could end up joiningan invalid/removed block with a valid block. Therefore, if guard2Block
is no longer valid, it should not proceed.
Fixes: eclipse-openj9/openj9#18873