VectorAPI Variable Shift intrinsics
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Fri Apr 20 22:13:24 UTC 2018
Shravya,
> ..., but we currently do not support a vector node without a scalar node (and there would be no scalar variable shift). ...
Can you elaborate a bit here?
I had the following 2 cases in mind:
instruct vsll8L_reg(vecZ dst, vecZ src, vecS shift) %{
predicate(UseAVX > 2 && n->as_Vector()->length() == 8);
match(Set dst (LShiftVL src shift));
vs
instruct vsllv8L_reg_evex(vecZ dst, vecZ src, vecZ shift) %{
predicate(UseAVX > 1 && n->as_Vector()->length() == 8 &&
n->in(2)->Opcode() != Op_LShiftCntV);
match(Set dst (LShiftVL src shift));
vecS vs vecZ for shifts, but both are represented with LShiftVL node.
BTW spotted some inconsistencies in predicates:
+instruct vsllv8L_reg_evex(vecZ dst, vecZ src, vecZ shift) %{
+ predicate(UseAVX > 1 && n->as_Vector()->length() == 8 &&
n->in(2)->Opcode() != Op_LShiftCntV);
+instruct vsrlv16I_reg_evex(vecZ dst, vecZ src, vecZ shift) %{
+ predicate(UseAVX > 1 && n->as_Vector()->length() == 16 &&
n->in(2)->Opcode() != Op_RShiftCntV);
+instruct vsrav4L_reg_evex(vecY dst, vecY src, vecY shift) %{
+ predicate(UseAVX > 1 && n->as_Vector()->length() == 4 &&
n->in(2)->Opcode() != Op_RShiftCntV);
+instruct vsllv16I_reg_evex(vecZ dst, vecZ src, vecZ shift) %{
+ predicate(UseAVX > 1 && n->as_Vector()->length() == 16 &&
n->in(2)->Opcode() != Op_LShiftCntV);
Shouldn't it be UseAVX > 2?
Best regards,
Vladimir Ivanov
>
> Thanks,
> Shravya.
>
> -----Original Message-----
> From: Vladimir Ivanov [mailto:vladimir.x.ivanov at oracle.com]
> Sent: Friday, April 20, 2018 2:24 PM
> To: Rukmannagari, Shravya <shravya.rukmannagari at intel.com>; Paul Sandoz <paul.sandoz at oracle.com>
> Cc: panama-dev at openjdk.java.net
> Subject: Re: VectorAPI Variable Shift intrinsics
>
> Sharvya,
>
> The usage of arity of vector operation to detect that shift value is a vector and not scalar looks a bit ugly.
>
> IMO the need for such parameter is a sign of a problem (but in a different place): *ShiftV* nodes are used to represent both variable scalar & vector shifts.
>
> I'd prefer to see different type of nodes representing those operations, but until we are there, I'm fine with the version you propose.
>
> Best regards,
> Vladimir Ivanov
>
> On 4/20/18 12:05, Rukmannagari, Shravya wrote:
>> Hi Paul,
>> I changed the name from meta to op_arity. Please find the modified patch below.
>> http://cr.openjdk.java.net/~srukmannagar/VectorAPI_shiftVar/webrev.02/
>>
>> Thanks,
>> Shravya.
>>
>> -----Original Message-----
>> From: Paul Sandoz [mailto:paul.sandoz at oracle.com]
>> Sent: Thursday, April 19, 2018 5:33 PM
>> To: Rukmannagari, Shravya <shravya.rukmannagari at intel.com>
>> Cc: panama-dev at openjdk.java.net
>> Subject: Re: VectorAPI Variable Shift intrinsics
>>
>> It looks good, but i find the parameter meta a little too opaque, perhaps “arity" or “op_arity" would be a better name? where a 0 value means don’t care or undefined?
>>
>> Paul.
>>
>>> On Apr 19, 2018, at 3:57 PM, Rukmannagari, Shravya <shravya.rukmannagari at intel.com> wrote:
>>>
>>> Hi All,
>>>
>>>
>>>
>>> I would like to contribute a patch adding vector intrinsics support for Vector API variable shift functions for int and long data types.
>>> Could you please review the patch here:
>>> http://cr.openjdk.java.net/~srukmannagar/VectorAPI_shiftVar/webrev/
>>>
>>>
>>>
>>> Regards,
>>>
>>> Shravya.
>>>
>>
More information about the panama-dev
mailing list