[13] RFR (S): 8161334: C2: Cast nodes hinder memory alias analysis

Tobias Hartmann tobias.hartmann at oracle.com
Fri Feb 15 07:31:31 UTC 2019


Thanks for updating, looks good.

Best regards,
Tobias

On 14.02.19 23:37, Vladimir Ivanov wrote:
> Thanks, Tobias.
> 
>> the comment in memnode.cpp:1056 references 'B' which is not defined.
> 
> Added the following clarification:
> 
> -        //  L =  LoadQ(AddP(Check/CastPP(B), #Off))
> -        //  S = StoreQ(AddP(             B , #Off), V)
> +        //   B = << base >>
> +        //   L =  LoadQ(AddP(Check/CastPP(B), #Off))
> +        //   S = StoreQ(AddP(             B , #Off), V)
> 
> Best regards,
> Vladimir Ivanov
> 
>> Otherwise, this looks good to me.
>>
>> Best regards,
>> Tobias
>>
>> On 12.02.19 23:32, Vladimir Ivanov wrote:
>>> http://cr.openjdk.java.net/~vlivanov/8161334/webrev.00/
>>> https://bugs.openjdk.java.net/browse/JDK-8161334
>>>
>>> The following IR is produced for the slow case reported in the bug:
>>>
>>>    B = CastPP (DecodeN ...)                   // ...$C:NotNull
>>>    S = StoreI M (AddP (            B) #off) V // ...$C:NotNull
>>>    L = LoadI  S (AddP (CheckCastPP B) #off)   // ...$C:NotNull:exact
>>>
>>> MemNode::can_see_stored_value() can't prove S & L access the same location since AddPs are different
>>> (since base nodes differ). There's a special case there, but only when Allocate is a base.
>>>
>>> Proposed patch generalizes existing Allocate case to the case when both base & offset are known to
>>> be the same.
>>>
>>> Testing: hs-precheckin-comp, tier1-5
>>>
>>> Best regards,
>>> Vladimir Ivanov


More information about the hotspot-compiler-dev mailing list