Skip to content

Changes

Summary

  1. Do not continue to merge back cold path if guard2 block has been removed (commit: 3f7c770) (details)
Commit 3f7c770d6a3f3683bb69b78d42e1caf8a3c7e449 by Annabelle Huo
Do not continue to merge back cold path if guard2 block has been removed

`changeBranchDestination` tries to remove unreachable blocks after the
removal 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 joining
an invalid/removed block with a valid block. Therefore, if guard2Block
is no longer valid, it should not proceed.

Fixes: eclipse-openj9/openj9#18873

Signed-off-by: Annabelle Huo <Annabelle.Huo@ibm.com>
(commit: 3f7c770)
The file was modified compiler/optimizer/VirtualGuardHeadMerger.cpp (diff)