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