Request for reviews (S): 6991188: C2 Crashes while compiling method
vladimir.kozlov at oracle.com
Tue Nov 2 16:42:29 PDT 2010
Tom Rodriguez wrote:
> + // Possible infinit build_connection_graph loop.
> Why 10? How many passes does it normally take?
Normally only 1-2 passes depending on graph complexity. In the bug test - 2, in JBB I saw 3 once.
> Could this process only the nodes which changed or does it really need to reprocess every node?
Only AddP, LoadP and StoreP (and narrow variants) are reprocessed. All other nodes are marked in vectSet _processed. There is check at the beginning of build_connection_graph().
I thought about using a separate worklist in new iterating code and populate it only with A/L/S nodes but I don't think it will help much.
And we need to reprocess all A/L/S nodes since we don't know which nodes will be affected by one change (the chain through deferred edges could be long and split/merge through Phis).
> On Nov 2, 2010, at 3:27 PM, Vladimir Kozlov wrote:
>> Fixed 6991188: C2 Crashes while compiling method
>> Construction of Connection Graph during EA relied on
>> DU relation corresponds to nodes index so that def
>> nodes processed before their uses. Move EA after
>> IGVN (for 6966411 fix broke that. Because of that
>> not all Graph edges will be created leading to
>> incorrect EA results and incorrect Ideal graph.
>> Walk over interesting nodes (AddP, LoadP, StoreP)
>> several times until no new edges are created.
>> Set limit on iterations.
>> Tested with assert in iterations bailout code and
>> calls to PhaseIdealLoop::verify() (removed from
>> final changes). Passed JPRT, full CTW, nsk.
More information about the hotspot-compiler-dev