RFR: 8287647: VM debug support: find node by pattern in name or dump [v3]

Tobias Hartmann thartmann at openjdk.java.net
Tue Jun 14 07:07:46 UTC 2022


On Mon, 13 Jun 2022 11:42:49 GMT, Emanuel Peter <epeter at openjdk.org> wrote:

>> **Goal**
>> Refactor `Node::find`, allow not just searching for `node->_idx`, but also matching for `node->Name()` and even `node->dump()`.
>> 
>> **Proposal**
>> Refactor `Node::find` into `visit_nodes`, which visits all nodes and calls a `callback` on them. This callback can be used to filter by `idx` (`find_node_by_idx`, `Node::find`, `find_node` etc.). It can also be used to match node names (`find_node_by_name`) and even node dump (`find_node_by_dump`).
>> 
>> Thus, I present these additional functions:
>> `Node* find_node_by_name(const char* name)`: find all nodes matching the `name` pattern.
>> `Node* find_node_by_dump(const char* pattern)`: find all nodes matching the `pattern`.
>> The nodes are sorted by node idx, and then dumped.
>> 
>> Patterns can contain `*` characters to match any characters (eg. `Con*L` matches both `ConL` and `ConvI2L`)
>> 
>> **Usecase**
>> Find all `CastII` nodes. Find all `Loop` nodes. Use `find_node_by_name`.
>> 
>> Find all all `CastII` nodes that depend on a rangecheck. Use `find_node_by_dump("CastII*range check dependency")`.
>> Find all `Bool` nodes that perform a `[ne]` check. Use `find_node_by_dump("Bool*[ne]")`.
>> Find all `Phi` nodes that are `tripcount`. Use `find_node_by_dump("Phi*tripcount")`.
>> 
>> Find all `Load` nodes that are associated with line 301 in some file. Use `find_node_by_dump("Load*line 301")`.
>> 
>> You can probably find more usecases yourself ;)
>
> Emanuel Peter has updated the pull request incrementally with one additional commit since the last revision:
> 
>   fix header issues

Very nice!

src/hotspot/share/opto/node.cpp line 1789:

> 1787: // not found or if the node to be found is not a control node (search will not find it).
> 1788: Node* Node::find(const int idx, bool only_ctrl) {
> 1789:   ResourceMark rm;

Do we need a `ResourceMark` in the new find methods as well? `UniqueMixedNodeList::_worklist` is a `ResourceObj`.

-------------

Marked as reviewed by thartmann (Reviewer).

PR: https://git.openjdk.org/jdk/pull/8988


More information about the hotspot-compiler-dev mailing list