RFR: 8350756: C2 SuperWord Multiversioning: remove useless slow loop when the fast loop disappears [v6]
Emanuel Peter
epeter at openjdk.org
Tue Mar 4 14:24:31 UTC 2025
> @rwestrel asked me for this here:
> https://github.com/openjdk/jdk/pull/22016#issuecomment-2684365921
>
> The idea: an unused `multiversion_if` (i.e. one where the `slow_loop` is still delayed, i.e. where the `fast_loop` has not yet added a runtime-check to the `multiversion_if`) can be constant-folded if the main `fast_loop` disappears. Because at that point we know that we will never add a new condition to the `multiversion_if`, and it will constant fold to true (towards the `fast_loop`) after loop-opts anyway.
>
> It also seems to fix a bug, where all multiversioned loops (fast / slow, pre/main/post) disappear, and then we are left with a if-diamond with the multiversion_if. This then hits assertion code in `PhaseIdealLoop::conditional_move`. This issue is also addressed with this patch here. I adjusted the code around that assert slightly to give better reporting and ensure we bail out of the optimization if we see an unexpected pattern.
Emanuel Peter has updated the pull request incrementally with one additional commit since the last revision:
improve IR rules for Christian
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/23865/files
- new: https://git.openjdk.org/jdk/pull/23865/files/8aa59aa3..7b2e4ce6
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=23865&range=05
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=23865&range=04-05
Stats: 12 lines in 2 files changed: 9 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/23865.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/23865/head:pull/23865
PR: https://git.openjdk.org/jdk/pull/23865
More information about the hotspot-compiler-dev
mailing list