RFR: 8346664: C2: Optimize mask check with constant offset

Matthias Ernst duke at openjdk.org
Fri Jan 17 14:53:00 UTC 2025


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

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

Commit messages:
 - "element".
 - avoid redundant comment
 - addConstNonConstMaskLong
 - randomize, test "(j + const) & nonconst_mask".
 - naming, comment
 - comment readability
 - consistently use bt
 - --more null checks
 - counter
 - T != X
 - ... and 3 more: https://git.openjdk.org/jdk/compare/43b7e9f5...35afeb0f

Changes: https://git.openjdk.org/jdk/pull/22856/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22856&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8346664
  Stats: 304 lines in 3 files changed: 134 ins; 53 del; 117 mod
  Patch: https://git.openjdk.org/jdk/pull/22856.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22856/head:pull/22856

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


More information about the hotspot-compiler-dev mailing list