RFR: 8274406: RunThese30M.java failed "assert(!LCA_orig->dominates(pred_block) || early->dominates(pred_block)) failed: early is high enough"
Tobias Hartmann
thartmann at openjdk.java.net
Thu Sep 30 06:30:30 UTC 2021
On Wed, 29 Sep 2021 08:17:04 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:
> [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
Looks good to me.
-------------
Marked as reviewed by thartmann (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/5747
More information about the hotspot-compiler-dev
mailing list