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

Jasmine Karthikeyan jkarthikeyan at openjdk.org
Mon May 26 07:29:51 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!

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

Commit messages:
 - Fix vector truncation with subword types

Changes: https://git.openjdk.org/jdk/pull/25440/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25440&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8350177
  Stats: 284 lines in 2 files changed: 282 ins; 0 del; 2 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