RFR: 8347365: C2: Fix the handling of depends_only_on_test
Quan Anh Mai
qamai at openjdk.org
Mon Jan 12 03:39:01 UTC 2026
Hi,
This PR fixes the handling of `depends_only_on_test` when the control graph is transformed. It has to do with the theoretical idea of `depends_only_on_test`, copy from the JBS issue description:
To start with, what is `depends_only_on_test`? Given a node `n` with the control input `c`, if `c` can be deduced from `c'` and `n->depends_only_on_test() == true`, then we can rewire the control input of `n` to `c'`. This means that `depends_only_on_test` does not mean that the node depends on a test, it means that the node depends on the test that is its control input.
For example:
if (y != 0) {
if (x > 0) {
if (y != 0) {
x / y;
}
}
}
Then `x/y` `depends_only_on_test` because its control input is the test `y != 0`. Then, we can rewire the control input of the division to the outer `y != 0`, resulting in:
if (y != 0) {
x / y;
if (x > 0) {
}
}
On the other hand, consider this case:
if (x > 0) {
if (y != 0) {
if (x > 0) {
x / y;
}
}
}
Then `x/y` does not `depends_only_on_test` because its control input is the test `x > 0` which is unrelated, we can see that if we rewire the division to the outer `x > 0` test, the division floats above the actual test `y != 0`. This means that `depends_only_on_test` is a dynamic property of a node, and not a static property of the division operation. It can change when we transform the graph and it can be different for different nodes of the same kind.
More details can be found in the description of `Node::depends_only_on_test` and `Node::pin_node_under_control` in this change.
Please take a look and leave your reviews, thanks a lot.
-------------
Commit messages:
- Fix depends_only_on_test
Changes: https://git.openjdk.org/jdk/pull/29158/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=29158&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8347365
Stats: 418 lines in 22 files changed: 201 ins; 103 del; 114 mod
Patch: https://git.openjdk.org/jdk/pull/29158.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/29158/head:pull/29158
PR: https://git.openjdk.org/jdk/pull/29158
More information about the hotspot-compiler-dev
mailing list