RFR: 8350756: C2 SuperWord Multiversioning: remove useless slow loop when the fast loop disappears [v2]

Emanuel Peter epeter at openjdk.org
Tue Mar 4 09:23:23 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:

  for Christian v1

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/23865/files
  - new: https://git.openjdk.org/jdk/pull/23865/files/5ba11a71..50f502ef

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=23865&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=23865&range=00-01

  Stats: 17 lines in 3 files changed: 10 ins; 0 del; 7 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