[lworld] Integrated: 8264586: [lworld] C2 compilation fails due to infinite loop in PhaseIterGVN::optimize

Tobias Hartmann thartmann at openjdk.java.net
Tue Apr 6 14:34:34 UTC 2021


On Tue, 6 Apr 2021 12:39:58 GMT, Tobias Hartmann <thartmann at openjdk.org> wrote:

> The problem is an `InlineTypePtrNode` that becomes dead after CCP removes a redundant null check and then keeps several other nodes alive. Since we don't run any loop opts anymore after CCP, the dead subgraph is not removed and the dead nodes are also not re-processed by `PhaseCCP::transform_once` to update their bottom types. As a result, two `LoadNodes` only used by a `ValueTypePtrNode` end up with types that are inconsistent with their bottom types and are re-enqueued for IGVN indefinitely by this code:
> https://github.com/openjdk/valhalla/blob/28a4ec0249fd86fe17f2b816c6f5f8eed31abfeb/src/hotspot/share/opto/memnode.cpp#L352-L358
> 
> I think we should aggressively remove `InlineTypePtrNodes` if they are no longer needed to keep track of the individual field values. I've added an Ideal transformation to take care of that.
> 
> The patch also includes a fix for an unrelated "Control flow was added although the intrinsic bailed out" failure and some cleanup/refactoring.
> 
> Thanks,
> Tobias

This pull request has now been integrated.

Changeset: 937f9b34
Author:    Tobias Hartmann <thartmann at openjdk.org>
URL:       https://git.openjdk.java.net/valhalla/commit/937f9b34
Stats:     66 lines in 6 files changed: 55 ins; 8 del; 3 mod

8264586: [lworld] C2 compilation fails due to infinite loop in PhaseIterGVN::optimize

-------------

PR: https://git.openjdk.java.net/valhalla/pull/377



More information about the valhalla-dev mailing list