RFR: 8286847: Rotate vectors don't support byte or short [v4]

Haomin duke at openjdk.java.net
Thu Jun 9 01:43:32 UTC 2022


On Thu, 9 Jun 2022 01:31:50 GMT, Haomin <duke at openjdk.java.net> wrote:

>> static void test_fun(byte[] a0, int[] b0, byte[] c0) {
>>     for (int i=0; i<ARRLEN; i++) {
>>       c0[i] = (byte)(a0[i] << (7) | a0[i] >>> (-7));
>>     }   
>>   }
>> 
>> 
>> when I implement RotateLeftV in loongarch.ad, I found this executed by c2 vector and executed by interpreter are not equal.
>> 
>> It's executed on x86 would create an assert error.
>> 
>> 
>>  # Internal Error (/home/wanghaomin/jdk/src/hotspot/share/opto/vectornode.cpp:347), pid=26469, tid=26485
>>  # assert(false) failed: not supported: byte
>> 
>> 
>> RotateLeftV for byte, short values produces incorrect Java result. Because java code should convert a byte, short value into int value, and then do RotateI.
>
> Haomin has updated the pull request incrementally with one additional commit since the last revision:
> 
>   delete assert(false, "not supported: %s", type2name(bt))

> Since `"VectorNode::implemented"` is only used for auto-vect, I think we can do the check in `"VectorNode::is_vector_rotate_supported" `and return false for byte and short type.

>I think we can remove unsupported type assertion from VectorNode::is_vector_rotate_supported since there is no direct x86 vector rotate instruction. 

Thanks for your suggestion. I just delete the assertion and not change auto-vectorizer.
Please review.

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

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


More information about the hotspot-compiler-dev mailing list