JIT: Propagate GC safe point flag in fgSplitBlockAtBeginning
#116718
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.
Fixes #116704 (comment). From that failure in particular, we have the following flowgraph before loop inversion runs:
BB06
has a tail call, and is flagged as having a GC safe point. It is also the exit block of a loop headed byBB05
. Loop inversion givesBB06
an empty predecessor to keep the loop canonical by callingfgSplitBlockAtBeginning
. This callsfgSplitBlockAtEnd
, which removes the safe point flag on the new block since it initially keeps the code in the predecessor.fgSplitBlockAtBeginning
does not reset the flag after moving the code into the new successor. Thus, we end up with the following flowgraph:Note the presence of the flag on
BB06
, which has no IR, and the lack of the flag onBB09
, which contains the actual tail call.