RFR: 8287647: VM debug support: find node by pattern in name or dump
Emanuel Peter
epeter at openjdk.java.net
Wed Jun 8 14:53:00 UTC 2022
**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 ;)
-------------
Commit messages:
- style fixes, and implemented case insensitive strstr
- make matching case insensitive
- missing include
- ensure null termination
- guard against long pattern, and fix array/pointer issues
- small logic fix
- refactoring of Node::find
- sort find results by idx
- 8287647: VM debug support: find node by name or substring in dump text
Changes: https://git.openjdk.java.net/jdk/pull/8988/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8988&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8287647
Stats: 242 lines in 1 file changed: 194 ins; 47 del; 1 mod
Patch: https://git.openjdk.java.net/jdk/pull/8988.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/8988/head:pull/8988
PR: https://git.openjdk.java.net/jdk/pull/8988
More information about the hotspot-compiler-dev
mailing list