RFR: 8264104: Eliminate unnecessary vector mask conversion during VectorUnbox for floating point VectorMask
Xiaohong Gong
xgong at openjdk.java.net
Mon Mar 29 06:06:42 UTC 2021
The Vector API defines different element types for floating point VectorMask. For example, the bitwise related APIs use "`long/int`", while data related APIs use "`double/float`". This makes some optimizations that based on the type checking cannot work well.
For example, the VectorBox/Unbox elimination like `"VectorUnbox (VectorBox v) ==> v"` requires the types of output and
input are equal. Normally this is necessary. However, due to the different element type for floating point VectorMask with the same species, the VectorBox/Unbox pattern is optimized to:
VectorLoadMask (VectorStoreMask vmask)
Actually the types can be treated as the same one for such cases. And considering the vector mask representation is the same for
vectors with the same element size and vector length, it's safe to do the optimization:
VectorLoadMask (VectorStoreMask vmask) ==> vmask
The same issue exists for GVN which is based on the type of a node. Making the mask node's` hash()/cmp()` methods depends on the element size instead of the element type can fix it.
-------------
Commit messages:
- 8264104: Eliminate unnecessary vector mask conversion during VectorUnbox for floating point VectorMask
Changes: https://git.openjdk.java.net/jdk/pull/3238/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3238&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8264104
Stats: 28 lines in 3 files changed: 27 ins; 0 del; 1 mod
Patch: https://git.openjdk.java.net/jdk/pull/3238.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3238/head:pull/3238
PR: https://git.openjdk.java.net/jdk/pull/3238
More information about the hotspot-compiler-dev
mailing list