RFR: 8356760: VectorAPI: Optimize VectorMask.fromLong for all-true/all-false cases

erifan duke at openjdk.org
Fri Jun 13 08:37:48 UTC 2025


If the input long value `l` of `VectorMask.fromLong(SPECIES, l)` would set or unset all lanes, `VectorMask.fromLong(SPECIES, l)` is equivalent to `maskAll(true)` or `maskAll(false)`. But the cost of `maskAll` is relative smaller than that of `fromLong`. This patch does the conversion for these cases if `l` is a compile time constant.

And this conversion also enables further optimizations that recognize maskAll patterns, see [1].

Some JTReg test cases are added to ensure the optimization is effective.

I tried many different ways to write a JMH benchmark, but failed. Since the input of `VectorMask.fromLong(SPECIES, l)` needs to be a specific compile-time constant, the statement will be hoisted out of the loop. If we don't use a loop, the hotspot will become other instructions, and no obvious performance change was observed. However, combined with the optimization of [1], we can observe a performance improvement of about 7% on both aarch64 and x64.

The patch was tested on both aarch64 and x64, all of tier1 tier2 and tier3 tests passed.

[1] https://github.com/openjdk/jdk/pull/24674

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

Commit messages:
 - 8356760: VectorAPI: Optimize VectorMask.fromLong for all-true/all-false cases

Changes: https://git.openjdk.org/jdk/pull/25793/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25793&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8356760
  Stats: 178 lines in 3 files changed: 174 ins; 3 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/25793.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25793/head:pull/25793

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


More information about the hotspot-compiler-dev mailing list