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