RFR: 8350177: C2 SuperWord: Integer.numberOfLeadingZeros, numberOfTrailingZeros, reverse and bitCount have input types wrongly turncated for byte and short [v2]

Jasmine Karthikeyan jkarthikeyan at openjdk.org
Wed Jun 4 04:28:38 UTC 2025


> Hi all,
> This patch fixes cases in SuperWord when compiling subword types where vectorized code would be given a narrower type than expected, leading to miscompilation due to truncation. This fix is a generalization of the same fix applied for `Integer.reverseBytes` in [JDK-8305324](https://bugs.openjdk.org/browse/JDK-8305324). The patch introduces a check for nodes that are known to tolerate truncation, so that any future cases of subword truncation will avoid creating miscompiled code.
> 
> The patch reuses the existing logic to set the type of the vectors to int, which currently disables vectorization for the affected patterns entirely. Once [JDK-8342095](https://bugs.openjdk.org/browse/JDK-8342095) is merged and automatic casting support is added the autovectorizer should automatically insert casts to and from int, maintaining correctness.
> 
> I've added an IR test that checks for correctly compiled outputs. Thoughts and reviews would be appreciated!

Jasmine Karthikeyan has updated the pull request incrementally with one additional commit since the last revision:

  Reformat, add comments and char tests

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/25440/files
  - new: https://git.openjdk.org/jdk/pull/25440/files/8d1a8174..da692994

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

  Stats: 144 lines in 2 files changed: 136 ins; 0 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/25440.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25440/head:pull/25440

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


More information about the hotspot-compiler-dev mailing list