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