Request reviews (S): 6896352: CTW fails hotspot/src/share/vm/opto/escape.cpp:1155

Tom Rodriguez Thomas.Rodriguez at Sun.COM
Wed Nov 4 12:26:21 PST 2009


On Nov 4, 2009, at 12:10 PM, Vladimir Kozlov wrote:

> Yes, it works currently without volatile because of side effect
> but I did not feel comfortable with the code as it looks.
> May be I should just add the comment that C++ will not remove
> the call since it has side effect.

It seems ok without the volatile to me but add a comment if you like.

>
> The code in escape.cpp creates new alias type with instance id
> which is different from original general type created now in
> Ideal_common (and in different places before).

I'd forgotten about the instance_id.  That makes sense then.

tom

> When we process allocations candidates for scalar replacement
> we cast their type (type of CheckCastPP node) to instance id:
>
>      const TypeOopPtr *t = igvn->type(n)->isa_oopptr();
>      if (t == NULL)
>        continue;  // not a TypeInstPtr
>      tinst = t->cast_to_exactness(true)->is_oopptr()- 
> >cast_to_instance_id(ni);
>
> Than we pass the allocation (CheckCastPP node) node as base to
> split_AddP() and replace AddP node's type with new one:
>
>  const TypeOopPtr *base_t = igvn->type(base)->isa_oopptr();
> ...
>  const TypeOopPtr *tinst = base_t->add_offset(t->offset())->is_oopptr 
> ();
>  // Do NOT remove the next line: ensure a new alias index is allocated
>  // for the instance type
>  int alias_idx = _compile->get_alias_index(tinst);
>  igvn->set_type(addp, tinst);
>
> This is the core for scalar replacement and how we separate memory
> slices for non-escaping objects which we intend to eliminate.
>
> Vladimir
>
> Tom Rodriguez wrote:
>> I don't think adding volatile could have the effect you are hoping  
>> for and I also don't think it's needed even if it did.   
>> get_alias_index has a side effect over in find_alias_type so it's  
>> impossible for it to be optimized away even if the return value  
>> isn't used.  Also if the new call in Ideal_common is doing it's job  
>> then do you really need the call in escape.cpp?  I don't see how  
>> splitting an AddP could create a new alias type if one already  
>> existed for that AddP.
>> tom
>> On Nov 4, 2009, at 10:51 AM, Vladimir Kozlov wrote:
>>>
>>> http://cr.openjdk.java.net/~kvn/6896352/webrev.00
>>>
>>> Fixed 6896352: CTW fails hotspot/src/share/vm/opto/escape.cpp:1155
>>>
>>> Problem:
>>> Alias type for LoadUS(ConP char[]) node from the test
>>> was not defined during Parse before EA since
>>> C->get_alias_index(phase->type(address)) was not called.
>>> But EA expects all alias types to be defined before it starts.
>>>
>>> Solution:
>>> Always call C->get_alias_index(phase->type(address)) in
>>> MemNode::Ideal_common() which is called by all memory nodes.
>>> I added "volatile" to expressions to avoid C++ removal
>>> since the result is not used.
>>>
>>> Reviewed by:
>>>
>>> Fix verified (y/n): y, test
>>>
>>> Other testing:
>>> JPRT, CTW
>>>



More information about the hotspot-compiler-dev mailing list