RFR: 8350756: C2 SuperWord Multiversioning: remove useless slow loop when the fast loop disappears [v5]
Christian Hagedorn
chagedorn at openjdk.org
Tue Mar 4 14:08:05 UTC 2025
On Tue, 4 Mar 2025 13:57:46 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.
>
> Emanuel Peter has updated the pull request incrementally with one additional commit since the last revision:
>
> updated Bool check
Otherwise, the update looks good, thanks!
test/hotspot/jtreg/compiler/loopopts/superword/TestMultiversionRemoveUselessSlowLoop.java line 60:
> 58: "post .* multiversion_fast", "= 2",
> 59: "multiversion_delayed_slow", "= 2", // both have the delayed slow_loop
> 60: "multiversion", "= 8"}, // nothing unexpected
Should we also add a match on `IRNode.OPAQUE_MULTIVERSIONING`?
-------------
Marked as reviewed by chagedorn (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/23865#pullrequestreview-2657687930
PR Review Comment: https://git.openjdk.org/jdk/pull/23865#discussion_r1979521253
More information about the hotspot-compiler-dev
mailing list