RFR: 8274406: RunThese30M.java failed "assert(!LCA_orig->dominates(pred_block) || early->dominates(pred_block)) failed: early is high enough"
Christian Hagedorn
chagedorn at openjdk.java.net
Wed Sep 29 08:26:01 UTC 2021
[JDK-8274074](https://bugs.openjdk.java.net/browse/JDK-8274074) enabled the sinking of pinned nodes inside a loop whose actual `get_ctrl()` is outside of the loop. This fix now rewired a `LoadN` node to the output projection of an `Allocate` node (right before the `Catch` node). This is unexpected and thus when expanding the `Allocate` macro node later, the `LoadN` is put into one path of an `If` that is inserted here:
https://github.com/openjdk/jdk/blob/756d22c3563ac92e74bb68d5eecb86d4fbab2c6b/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp#L758
As a result, the load's early block does not dominate its LCA block later when inserting anti dependencies and we fail with the assertion.
To avoid the need to special case certain nodes obtained with `get_ctrl()`, I propose to simply use `place_outside_loop()` to rewire the control input to the first node right outside of the loop.
I additionally fixed the wrong format of the compile command in the test added by JDK-8274074 which produced a printed warning/error but the test still worked.
Thanks,
Christian
-------------
Commit messages:
- 8274406: RunThese30M.java failed "assert(!LCA_orig->dominates(pred_block) || early->dominates(pred_block)) failed: early is high enough"
Changes: https://git.openjdk.java.net/jdk/pull/5747/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5747&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8274406
Stats: 4 lines in 2 files changed: 0 ins; 0 del; 4 mod
Patch: https://git.openjdk.java.net/jdk/pull/5747.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/5747/head:pull/5747
PR: https://git.openjdk.java.net/jdk/pull/5747
More information about the hotspot-compiler-dev
mailing list