RFR(M): 8026796: Make replace_in_map() on parent maps generic

Roland Westrelin roland.westrelin at oracle.com
Tue May 20 15:47:09 UTC 2014


Hi Vladimir,

Thanks for taking a look at this.

> Why previous code 8024069 does not work?

The previous code works but this one improves and replaces it. When 8024069 was reviewed, you asked for a generic fix:

http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2013-October/012215.html

I will work on your other comments and send an updated webrev.

Roland.

> 'before', 'after' may not good names. You call new nodes 'improved' in the comment you should use it.
> 
> You meaningful names (not o,n) in record(Node* o, Node* n).
> 
> It would be nice to use getter/setter functions:
> 
> ReplacedNodes r = kit.map()->_replaced_nodes;
> kit.map()->_replaced_nodes = r;
> 
> Do you have cases when ReplacedNodes could be repopulated? So that we reset length GrowableArray::clear() instead of trashing pointer:
> 
> +void ReplacedNodes::reset() {
> +  _replaced_nodes = NULL;
> +}
> 
> I don't see cleanup of ReplacedNodes in Node::destruct() and other places where we clean up expensive nodes, for example.
> 
> Is the code in Parse::create_entry_map() correct? First, you destroy ReplacedNodes:
> 
>  _caller->map()->delete_replaced_nodes();
> 
> then you used it to initialize new map:
> 
>  SafePointNode* inmap = _caller->map();
>  map()->transfer_replaced_nodes_from(inmap, _new_idx);
> 
> 
> Thanks,
> Vladimir
> 
> On 5/19/14 4:37 AM, Roland Westrelin wrote:
>> I forgot the webrev:
>> 
>> http://cr.openjdk.java.net/~roland/8026796/webrev.00/
>> 
>> Roland.
>> 
>> On May 19, 2014, at 1:01 PM, Roland Westrelin <roland.westrelin at oracle.com> wrote:
>> 
>>> This change reverts:
>>> 
>>> https://bugs.openjdk.java.net/browse/JDK-8024069
>>> 
>>> and propagates replacements in replace_in_map() to callers in a generic way. Every time replace_in_map() is called, the pair of nodes passed to replace_in_map is pushed on a list that the current map carries. When control flow paths merge, the lists for each of the control flow path’s maps are also merged. When parsing exits a method to return to a caller, the replaced nodes on the exit path are used to update the caller's map. This change also propagates replaced nodes after late inlining.
>>> 
>>> Roland.
>> 



More information about the hotspot-compiler-dev mailing list