RFR: 8253404: C2: assert(C->live_nodes() <= C->max_node_limit()) failed: Live Node limit exceeded limit

Roberto Castañeda Lozano github.com+8792647+robcasloz at openjdk.java.net
Wed Oct 7 13:42:18 UTC 2020


On Wed, 7 Oct 2020 12:37:26 GMT, Roberto Castañeda Lozano <github.com+8792647+robcasloz at openjdk.org> wrote:

>> Record nodes as dead in Node::destruct() if their index cannot be directly
>> reclaimed. This prevents the "Live Node limit exceeded limit" assertion failure
>> by improving the accuracy of Compile::live_nodes() when "hook" nodes in
>> ConvI2LNode::Ideal() are created and deleted non-consecutively.
>>     
>> This addition might result in multiple calls to compile::record_dead_node() for
>> the same node (e.g. from PhaseIdealLoop::spinup()), but this is safe, as
>> compile::record_dead_node() is idempotent.
>
> There is, potentially, a more fundamental issue with the exponential C2 execution time of the `ConvI2L(AddI(x, y)) ->
> AddL(ConvI2L(x), ConvI2L(y))` optimization in `ConvI2LNode::Ideal()` when optimizing long chains of int add/sub nodes
> followed by an int-to-long conversion, but I think that can be addressed separately in a RFE. The likelihood of hitting
> this worst case in "real code" and the actual impact on total execution time is unclear.

Tested on tier1-3.

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

PR: https://git.openjdk.java.net/jdk/pull/540


More information about the hotspot-compiler-dev mailing list