Integrated: 8350756: C2 SuperWord Multiversioning: remove useless slow loop when the fast loop disappears

Emanuel Peter epeter at openjdk.org
Thu Mar 6 06:51:05 UTC 2025


On Mon, 3 Mar 2025 13:38:55 GMT, Emanuel Peter <epeter at openjdk.org> wrote:

> @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.

This pull request has now been integrated.

Changeset: e82031ec
Author:    Emanuel Peter <epeter at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/e82031ec1a8ae2478f83d009594d512a13fdb77e
Stats:     234 lines in 7 files changed: 231 ins; 0 del; 3 mod

8350756: C2 SuperWord Multiversioning: remove useless slow loop when the fast loop disappears

Reviewed-by: kvn, chagedorn

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

PR: https://git.openjdk.org/jdk/pull/23865


More information about the hotspot-compiler-dev mailing list