On Fri, 28 Nov 2025 09:21:18 GMT, Galder Zamarreño <[email protected]> wrote:
>> Eric Fang has updated the pull request with a new target base due to a merge >> or a rebase. The incremental webrev excludes the unrelated changes brought >> in by the merge/rebase. The pull request contains three additional commits >> since the last revision: >> >> - Don't read and write the same memory in the JMH benchmarks >> - Merge branch 'master' into JDK-8370863-mask-cast-opt >> - 8370863: VectorAPI: Optimize the VectorMaskCast chain in specific patterns >> >> `VectorMaskCastNode` is used to cast a vector mask from one type to >> another type. The cast may be generated by calling the vector API `cast` >> or generated by the compiler. For example, some vector mask operations >> like `trueCount` require the input mask to be integer types, so for >> floating point type masks, the compiler will cast the mask to the >> corresponding integer type mask automatically before doing the mask >> operation. This kind of cast is very common. >> >> If the vector element size is not changed, the `VectorMaskCastNode` >> don't generate code, otherwise code will be generated to extend or narrow >> the mask. This IR node is not free no matter it generates code or not >> because it may block some optimizations. For example: >> 1. `(VectorStoremask (VectorMaskCast (VectorLoadMask x)))` >> The middle `VectorMaskCast` prevented the following optimization: >> `(VectorStoremask (VectorLoadMask x)) => (x)` >> 2. `(VectorMaskToLong (VectorMaskCast (VectorLongToMask x)))`, which >> blocks the optimization `(VectorMaskToLong (VectorLongToMask x)) => (x)`. >> >> In these IR patterns, the value of the input `x` is not changed, so we >> can safely do the optimization. But if the input value is changed, we >> can't eliminate the cast. >> >> The general idea of this PR is introducing an `uncast_mask` helper >> function, which can be used to uncast a chain of `VectorMaskCastNode`, >> like the existing `Node::uncast(bool)` function. The funtion returns >> the first non `VectorMaskCastNode`. >> >> The intended use case is when the IR pattern to be optimized may >> contain one or more consecutive `VectorMaskCastNode` and this does not >> affect the correctness of the optimization. Then this function can be >> called to eliminate the `VectorMaskCastNode` chain. >> >> Current optimizations related to `VectorMaskCastNode` include: >> 1. `(VectorMaskCast (VectorMaskCast x)) => (x)`, see JDK-8356760. >> 2. `(XorV (VectorMa... > > Nice improvement @erifan, just some small comments from me Hi @galderz would you mind taking another look of this PR, thanks~ ------------- PR Comment: https://git.openjdk.org/jdk/pull/28313#issuecomment-3641419459
