RFR(S): 8238723: yank_alloc_node must remove membar

Nils Eliasson nils.eliasson at oracle.com
Fri Feb 21 14:13:36 UTC 2020


I added a simple test case with stores after the allocation.

I also replaced yank_initalize_node with init->remove(...) since the 
initialize node is a subclass of membar.

http://cr.openjdk.java.net/~neliasso/8238723/webrev.03

Best Regards,

Nils Eliasson


On 2020-02-20 16:59, Vladimir Ivanov wrote:
>
>> And to address your concern on AddPs - I still haven't seen an 
>> example on when they occur. How would the graph look? What is using 
>> the addP? So far I have been content with asserting on addPs, and 
>> still hasn't found any occurrence in our testing. But I want to be 
>> safe so I will change to skip the allocation removal if there is an 
>> addP (but keep asserting in debug builds)
>
> InitializeNode attemps to convert stores into freshly allocated object 
> into "initializing stores" to avoid redundant zeroing of the contents 
> (see InitializeNode::capture_store() [1]). The comment provides an 
> example of IR shape:
>
> //   alloc = (Allocate ...)
> //   rawoop = alloc.RawAddress
> //   rawstore1 = (StoreC alloc.Control alloc.Memory (+ rawoop 12) 1)
> //   rawstore2 = (StoreC alloc.Control alloc.Memory (+ rawoop 14) 2)
> //   init = (Initialize alloc.Control alloc.Memory rawoop
> //                      rawstore1 rawstore2)
>
> Those stores should go away along with InitializeNode, so it should be 
> safe to unlink them right away. So, I don't see a compelling reason to 
> skip allocation removal in such case.
>
> Best regards,
> Vladimir Ivanov
>
> http://hg.openjdk.java.net/jdk/jdk/file/tip/src/hotspot/share/opto/memnode.cpp#l3803 
>
>
>>
>> // Nils
>>
>>
>>
>> [1] 
>> http://hg.openjdk.java.net/jdk/jdk/file/tip/src/hotspot/share/opto/parse1.cpp#l1010 
>>
>>
>>>
>>> Sometimes MemBarRelease is added [1] which can degenerate into 
>>> MemBarCPUOrder [2].
>>>
>>> I'd prefer to see all the barriers which are linked to the 
>>> allocation be removed.
>>>
>>> Best regards,
>>> Vladimir Ivanov
>>>
>>> [1] 
>>> http://hg.openjdk.java.net/jdk/jdk/file/tip/src/hotspot/share/opto/parse1.cpp#l1005 
>>>
>>>
>>> [2] 
>>> http://hg.openjdk.java.net/jdk/jdk/file/tip/src/hotspot/share/opto/escape.cpp#l1912 
>>>
>>>
>>>> On 2020-02-18 14:01, Tobias Hartmann wrote:
>>>>> On 18.02.20 13:32, Vladimir Ivanov wrote:
>>>>>> In case of MemBar I assume you are handling the precedence edge 
>>>>>> (MemBarNode::Precedent). Why do you
>>>>>> replace it with TOP? I assume you want to eliminate the barrier, 
>>>>>> but I don't see how it helps.
>>>>> Actually, you might want to use MemBarNode::remove.
>>>>>
>>>>> Best regards,
>>>>> Tobias
>>


More information about the hotspot-compiler-dev mailing list