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

Eric Liu eliu at openjdk.java.net
Tue May 17 06:56:50 UTC 2022


On Tue, 17 May 2022 03:09:12 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.

test/hotspot/jtreg/compiler/vectorization/TestRotateByteVector.java line 90:

> 88:             res[i] = (byte) ((arr[i] << shift) | (arr[i] >>> -shift));
> 89:         }
> 90:     }

This function is duplicated with with `testRotateLeft`.  It's not enough to verify the correctness by comparing the results of these two functions.

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

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


More information about the hotspot-compiler-dev mailing list