RFR: 8356708: C2: loop strip mining expansion doesn't take sunk stores into account
Roland Westrelin
roland at openjdk.org
Tue Jun 10 10:21:46 UTC 2025
`test1()` has a counted loop with a `Store` to `field`. That `Store`
is sunk out of loop. When the `OuterStripMinedLoop` is expanded, only
`Phi`s that exist at the inner loop are added to the outer
loop. There's no `Phi` for the slice of the sunk `Store` (because
there's no `Store` left in the inner loop) so no `Phi` is added for
that slice to the outer loop. As a result, there's a missing anti
dependency for `Load` of `field` that's before the loop and it can be
scheduled inside the outer strip mined loop which is incorrect.
`test2()` is the same as `test1()` but with a chain of 2 `Store`s.
`test3()` is another variant where a `Store` is left in the inner loop
after one is sunk out of it so the inner loop still has a `Phi`. As a
result, the outer loop also gets a `Phi` but it's incorrectly wired as
the sunk `Store` should be the input along the backedge but is
not. That one doesn't cause any failure AFAICT.
The fix I propose is some extra logic at expansion of the
`OuterStripMinedLoop` to handle these corner cases.
-------------
Commit messages:
- test & fix
Changes: https://git.openjdk.org/jdk/pull/25717/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25717&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8356708
Stats: 188 lines in 3 files changed: 180 ins; 0 del; 8 mod
Patch: https://git.openjdk.org/jdk/pull/25717.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/25717/head:pull/25717
PR: https://git.openjdk.org/jdk/pull/25717
More information about the hotspot-compiler-dev
mailing list