RFR: 8346664: C2: Optimize mask check with constant offset
Matthias Ernst
duke at openjdk.org
Fri Jan 17 14:53:00 UTC 2025
On Sat, 21 Dec 2024 14:08:02 GMT, Matthias Ernst <duke at openjdk.org> wrote:
> Fixes [JDK-8346664](https://bugs.openjdk.org/browse/JDK-8346664): extends the optimization of masked sums introduced in #6697 to cover constant values, which currently break the optimization.
>
> Such constant values arise in an expression of the following form, for example from `MemorySegmentImpl#isAlignedForElement`:
>
>
> (base + (index + 1) << 8) & 255
> => MulNode
> (base + (index << 8 + 256)) & 255
> => AddNode
> ((base + index << 8) + 256) & 255
>
>
> Currently, `256` is not being recognized as a shifted value. This PR enables further reduction:
>
>
> ((base + index << 8) + 256) & 255
> => MulNode (this PR)
> (base + index << 8) & 255
> => MulNode (PR #6697)
> base & 255 (loop invariant)
>
>
> Implementation notes:
> * I verified that the originating issue "scaled varhandle indexed with i+1" (https://mail.openjdk.org/pipermail/panama-dev/2024-December/020835.html) is resolved with this PR.
> * ~in order to stay with the flow of the current implementation, I refrained from solving general (const & mask)==0 cases, but only those where const == _ << shift.~
> * ~I modified existing test cases adding/subtracting from the index var (which would fail with current C2). Let me know if would like to see separate cases for these.~
Appreciate the review!
Thanks!
> two weeks to process your OCA
I don't get the impression anything is being processed here. Is there any way to understand where we stand?
src/hotspot/share/opto/mulnode.cpp line 679:
> 677: // patterns similar to (v << 2) & 3
> 678: if (AndIL_is_zero_element(phase, in(1), in(2), T_INT) ||
> 679: AndIL_is_zero_element(phase, in(2), in(1), T_INT)) {
I find it easier to reason about the "reverse" check when we simply expand it here.
-------------
PR Review: https://git.openjdk.org/jdk/pull/22856#pullrequestreview-2521697169
PR Review: https://git.openjdk.org/jdk/pull/22856#pullrequestreview-2537086713
PR Comment: https://git.openjdk.org/jdk/pull/22856#issuecomment-2587897255
PR Review Comment: https://git.openjdk.org/jdk/pull/22856#discussion_r1896570915
More information about the hotspot-compiler-dev
mailing list