Request for reviews (S): 6991188: C2 Crashes while compiling method

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Nov 3 10:16:32 PDT 2010


Thank you, Ramki

How about this?:

   // Normally only 1-3 passes needed to build
   // Connection Graph depending on graph complexity.
   // Set limit to 10 to catch situation when something
   // did go wrong and recompile the method without EA.
#define CG_BUILD_ITER_LIMIT 10
   int iterations = 0;
   while(_progress && (iterations++ < CG_BUILD_ITER_LIMIT)) {

Thanks,
Vladimir

Y. S. Ramakrishna wrote:
> Hi Vladimir --
> 
> Just a general $0.02 comment, without my knowing anything about
> what is actually being done here.
> 
> Can you give an upper bound on the number of iterations
> that would be needed in terms of a suitable metric on the
> starting graph? A little more commentary on the upper bound
> (if a non-trivial one exists), and the choice and suitability of
> the default, would be nice.
> 
> Also, perhaps use a defined constant instead of the 10? (Would it
> be useful to have it be a diagnostic tunable?)
> 
> -- ramki
> 
> On 11/02/10 16:59, Tom Rodriguez wrote:
>> On Nov 2, 2010, at 4:42 PM, Vladimir Kozlov wrote:
>>
>>> Thanks, Tom
>>>
>>> Tom Rodriguez wrote:
>>>> Typo:
>>>> +     // Possible infinit build_connection_graph loop.
>>> Fixed.
>>>
>>>> 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).
>>
>> Sounds and looks good.
>>
>> tom
>>
>>> Thanks,
>>> Vladimir
>>>
>>>> tom
>>>> On Nov 2, 2010, at 3:27 PM, Vladimir Kozlov wrote:
>>>>> http://cr.openjdk.java.net/~kvn/6991188/webrev.00
>>>>>
>>>>> 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 mailing list