[vectorIntrinsics+mask] RFR: 8264563: Add masked vector intrinsics for binary/store operations [v2]
Sandhya Viswanathan
sviswanathan at openjdk.java.net
Tue Apr 6 22:47:26 UTC 2021
On Tue, 6 Apr 2021 07:51:48 GMT, Xiaohong Gong <xgong at openjdk.org> wrote:
>> Hi, this is the basic masking support PR for Vector API mask operations on platforms like SVE/AVX-512. The main codes are from [1], which contains:
>>
>> - The predicate register allocation for Arm SVE, and vector mask type definition.
>> - The basic optimization for parts of the mask operations with masking feature. It contains:
>>
>> 1. Vector API java implementation changes for masked binary/store.
>> 2. C2 compiler mid-end changes, including new vector intrinsics implementation and mask IRs.
>>
>> Note that for easier discussion, this PR only provides the changes for limited masked operations (e.g. binary/store) and the mask generations (e.g. load/compare/maskAll). We will continue working on the following missing parts:
>>
>> - Mask support for other operations (unary,ternary,reduction,load,etc.)
>> - More mask IRs implementation (and/or/xor, toVector, allTrue, anyTrue, trueCount, eq, etc)
>> - Vector boxing/unboxing support for mask type (deoptimization support for predicate registers)
>>
>> Also note that this PR doesn't contain any backend implementations. So the blend pattern will be generated as before. Regarding to the AArch64 SVE backend support, we will create a separate PR based on this one in future.
>>
>> [1] https://github.com/openjdk/panama-vector/pull/40
>>
>> See more details from:
>> http://cr.openjdk.java.net/~xgong/rfr/mask/Vector%20API%20masking%20support%20proposal%20for%20Arm%20SVE.pdf
>> http://cr.openjdk.java.net/~xgong/rfr/mask/VectorAPI%20masking%20support.pdf
>>
>> Any suggestions and discussions are welcome! Thanks a lot!
>
> Xiaohong Gong has updated the pull request incrementally with one additional commit since the last revision:
>
> Revert changes of register allocation and new added mask IRs
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template line 694:
> 692: $abstractvectortype$ hi = this.lanewise(LSHL, (op == ROR) ? neg : that);
> 693: $abstractvectortype$ lo = this.lanewise(LSHR, (op == ROR) ? that : neg);
> 694: return m != null ? blend(hi.lanewise(OR, lo), m) : hi.lanewise(OR, lo);
Checking for m!=null would cause boxing here.
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template line 701:
> 699: } else if (op == DIV) {
> 700: VectorMask<$Boxtype$> eqz = that.eq(($type$)0);
> 701: if (m != null) {
Checking for m!=null would cause boxing here.
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template line 823:
> 821: if (opKind(op, VO_SHIFT) && ($type$)(int)e == e) {
> 822: $abstractvectortype$ shift = lanewiseShift(op, (int) e);
> 823: return m != null ? blend(shift, m) : shift;
Checking for m!=null would cause boxing here.
-------------
PR: https://git.openjdk.java.net/panama-vector/pull/57
More information about the panama-dev
mailing list