RFR: 8144484: assert(no_dead_loop) failed: dead loop detected

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Feb 1 09:02:06 UTC 2017


On 2/1/17 12:19 AM, Vladimir Kozlov wrote:
> Sorry, I don't like this fix.
>
> Based on your evaluation one control path is dead (top) and it will be optimized out later. It was unfortunate that Phi
> node was processed first. Change graph (split through MergeMem) is dangerous in this state of graph.
>
> I would suggest to bailout early:
>
> 1886   if (progress == NULL && can_reshape && type() == Type::MEMORY) {
> 1887     // see if this phi should be sliced
> 1888     uint merge_width = 0;
> 1889     bool saw_self = false;
> 1890     for( uint i=1; i<req(); ++i ) {// For all paths in
> 1891       Node *ii = in(i);
>
> +          // TOP inputs should not be counted as safe inputs because if the
> +          // Phi references itself through all other inputs then splitting the
> +          // Phi through memory merges would create dead loop at later stage.
> +          if (ii == top) {
> +            return top; // Delay optimization until graph is cleaned.

Sorry, wrong return value. Should be return NULL;

> +          }
>
> 1892       if (ii->is_MergeMem()) {
> 1893         MergeMemNode* n = ii->as_MergeMem();
>
> Thanks,
> Vladimir
>
> On 1/31/17 11:38 PM, Tobias Hartmann wrote:
>> Hi Rahul,
>>
>> On 31.01.2017 19:55, Rahul Raghavan wrote:
>>> Please see updated <webrev.01> -
>>> http://cr.openjdk.java.net/~rraghavan/8144484/webrev.01/
>>
>> Looks good to me!
>>
>> Best regards,
>> Tobias
>>


More information about the hotspot-compiler-dev mailing list