Integrated: 8260653: Unreachable nodes keep speculative types alive
Nils Eliasson
neliasso at openjdk.java.net
Thu Feb 18 10:26:41 UTC 2021
On Wed, 17 Feb 2021 10:27:08 GMT, Nils Eliasson <neliasso at openjdk.org> wrote:
> The RunThese test fails because after first igvn.optimize() (directly after parsing) there are unreachable nodes cycles left. Later when remove_speculative_types() is called - only reachable nodes will have their speculative type removed. At the end of remove_speculative_types() there is an assert that all speculative types have been removed that will fail.
>
> This problem will not cause crashes in production - it is only a sanity test.
>
> I suggest adding a call to PhaseRemoveUseless before remove_speculative_types. This will cost a few extra cycles but it is the only way we can guarantee that no unreachable nodes are left.
>
> When debugging this I experimented with adding a call to verify_graph_edges to check for dead code at the same spot. This triggers failures in a lot of test. The conclusion is that it is very common that we have dead node cycles - but they very rarely keep speculative types alive.
>
> A big thank you to Dean Long how created the reproducer for this bug.
>
> Please review.
This pull request has now been integrated.
Changeset: 3a21e1df
Author: Nils Eliasson <neliasso at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/3a21e1df
Stats: 6 lines in 1 file changed: 5 ins; 0 del; 1 mod
8260653: Unreachable nodes keep speculative types alive
Reviewed-by: vlivanov, thartmann
-------------
PR: https://git.openjdk.java.net/jdk/pull/2606
More information about the hotspot-compiler-dev
mailing list