StoreCM Optimization
Tom Rodriguez
Thomas.Rodriguez at Sun.COM
Mon Aug 31 13:16:34 PDT 2009
Vladimir looked into the macro'izing StoreP but it's go some
complexities since it requires changes to the memory graph during
expansion. Eliminating dead StoreCMs can be done without that. It
just requires some analysis to reliably identify which store a StoreCM
applies to.
tom
On Aug 31, 2009, at 12:08 PM, Changpeng Fang wrote:
> On 08/31/09 11:11, Tom Rodriguez wrote:
>> I don't think so. Because of optimizations, couldn't the input be
>> another memory state that merges multiple stores that are sharing
>> the card mark? I seem to remember an old email exchange about this
>> but I can't find it now.
>> Tom Rodriguez wrote:
>>
> I remember that I raised the similar question before. Below is part
> of the email exchange.
>> On Feb 25, 2009, at 12:26 PM, Changpeng Fang wrote:
>>
>>> Tom Rodriguez wrote:
>>>>
>>>>> The question is:
>>>>>
>>>>> (1) do we need to generated this StoreCM for a store when we
>>>>> know this store
>>>>> is eliminated?
>>>>
>>>> If we know at parse time that it was eliminated then a card mark
>>>> is clearly not needed.
>>>>
>>> The problem in question follows this case. We know the
>>> StoreNode::Identity eliminate
>>> the StoreP and return a phi node. However, at the time of
>>> generating StoreCM, we only
>>> see this Phi node (as oop_store), and this will lead to the case
>>> (2) below. When we see
>>> this Phi node we don't know whether it is generated by the store
>>> elimination or other
>>> optimizations (In those cases, storeCM may still be required?).
>>
>> The set of optimizations performed at parse time is more limited
>> and won't include any serious reshapes of the graph since the graph
>> is incomplete. I think the code that performs the card mark in the
>> parser could be modified to skip the card mark if the returned node
>> isn't a store. Obviously a more complete solution would be nicer.
>
> I am investigating how a Macro storeP node can help.
>
>
> Changpeng
>
>
>
>> tom
>>
>> On Aug 31, 2009, at 10:41 AM, Changpeng Fang wrote:
>>
>>> Is it safe to simply remove the storeCM node if its OopStore is
>>> not a store?
>>>
>>> diff -r d0acbc302e14 src/share/vm/opto/memnode.cpp
>>> --- a/src/share/vm/opto/memnode.cpp Mon Aug 17 14:45:02 2009
>>> -0700
>>> +++ b/src/share/vm/opto/memnode.cpp Mon Aug 31 10:34:15 2009
>>> -0700
>>> @@ -2309,7 +2309,7 @@ Node *StoreCMNode::Identity( PhaseTransf
>>> //------------------------------
>>> Identity---------------------------------------
>>> Node *StoreCMNode::Identity( PhaseTransform *phase ) {
>>> // No need to card mark when storing a null ptr
>>> Node* my_store = in(MemNode::OopStore);
>>> if (my_store->is_Store()) {
>>> const Type *t1 = phase->type( my_store->in(MemNode::ValueIn) );
>>> if( t1 == TypePtr::NULL_PTR ) {
>>> return in(MemNode::Memory);
>>> }
>>> - }
>>> +} else return in(MemNode::Memory);
>>> return this;
>>> }
>>>
>>>
>>> Thanks,
>>>
>>> Changpeng
>>
>
More information about the hotspot-compiler-dev
mailing list