RFR(M): 8031754: Type speculation should favor profile data from outermost inlined method

Roland Westrelin roland.westrelin at oracle.com
Thu Feb 6 10:13:28 PST 2014


>> Hi Vladimir,
>> 
>>>>> In general I am comfortable to have inline_depth as additional type's attribute. But only for speculative types when it make sense.
>>>>> 
>>>>> So why you keep _inline_depth in remove_speculative()?
>>>> 
>>>> Because it’s never used in practice with non speculative types (it should always be InlineDepthBottom for a non speculative type). The only place where it changes the behavior of compilation is in GraphKit::record_profile_for_speculation() where it’s used only for speculative types. Anyway, I can reset it to InlineDepthBottom in remove_speculative() if you like.
>>> 
>>> Yes, please, set to InlineDepthBottom. It will be consistent with types without speculative types.
>> 
>> Actually, that’s not possible. Because then, that code:
>> 
>> 2589     if (res_oopptr->remove_speculative() == res_oopptr->speculative()) {
>> 2590       return res_oopptr->remove_speculative();
>> 
>> in TypeOopPtr::xmeet()
>> 
>> doesn’t trigger if res_oopptr has an inline depth of InlineDepthTop. remove_speculative() transforms it to InlineDepthBottom. And the type system is no longer symmetric.
> 
> Do you know why it is top? The default value is InlineDepthBottom, how it is converted to top?

It’s top because it’s a join and for a join the dual of the _inline_depth is used.

Roland.

> 
>> 
>> Instead shouldn’t I assert in remove_speculative() that if _speculative is non NULL then _inline_depth is InlineDepthTop or InlineDepthBottom?
> 
> To have assert is good but we need to understand why in such case inline_depth could be top.
> 
> Thanks,
> Vladimir
> 
>> 
>> Roland.
>> 



More information about the hotspot-compiler-dev mailing list