RFR(XS): 8202123: C2 Crash in Node::in(unsigned int) const+0x14

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Jul 9 17:29:40 UTC 2018


On 7/9/18 7:14 AM, Roland Westrelin wrote:
> 
> Hi Tobias,
> 
> Thanks for looking at this.
> 
>> Why are we not able to figure out that counts != arr? Shouldn't EA
>> even remove the allocation and scalar replace counts?
> 
> The allocation is found to be non escaping but in
> ConnectionGraph::adjust_scalar_replaceable_state():
> 
>      // 4. An object is not scalar replaceable if it has a field with unknown
>      // offset (array's element is accessed in loop).
>      if (offset == Type::OffsetBot) {
>        jobj->set_scalar_replaceable(false);
>        return;
>      }
> 
> so it's set to non scalar replaceable which prevents
> ConnectionGraph::split_unique_types() from running and an instance_id to
> be assigned to the allocation. MemNode::optimize_memory_chain() doesn't
> seem to do much unless a pointer is is_known_instance_field() which
> requires an _instance_id.

It was mostly done to reduce time spent in EA. I think nothing prevent us from assigning 
_instance_id to any *non-escaping* allocation if it will help us to optimize code (for value types 
for example).

Thanks,
Vladimir

> 
> Roland.
> 


More information about the hotspot-compiler-dev mailing list