Integrated: 8264104: Eliminate unnecessary vector mask conversion during VectorUnbox for floating point VectorMask

Xiaohong Gong xgong at openjdk.java.net
Fri Apr 16 07:16:36 UTC 2021


On Mon, 29 Mar 2021 06:00:46 GMT, Xiaohong Gong <xgong at openjdk.org> wrote:

> 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.

This pull request has now been integrated.

Changeset: e0151a6f
Author:    Xiaohong Gong <xgong at openjdk.org>
Committer: Ningsheng Jian <njian at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/e0151a6f
Stats:     103 lines in 9 files changed: 102 ins; 0 del; 1 mod

8264104: Eliminate unnecessary vector mask conversion during VectorUnbox for floating point VectorMask

Reviewed-by: kvn, vlivanov

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

PR: https://git.openjdk.java.net/jdk/pull/3238


More information about the hotspot-compiler-dev mailing list