RFR: 8286847: Rotate vectors don't support byte or short [v2]
Xiaohong Gong
xgong at openjdk.java.net
Wed May 18 04:15:42 UTC 2022
On Wed, 18 May 2022 01:13:00 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:
>
> modify testcase
src/hotspot/share/opto/vectornode.cpp line 158:
> 156: default: return 0; // RotateLeftV for byte, short values produces incorrect Java result.
> 157: // Because java code should convert a byte, short value into int value,
> 158: // and then do RotateI.
I‘m afraid this will influence the VectorAPI intrinsification for `ByteVector `and `ShortVector`. Did you test the benchmarks for these two APIs with the subword type?
-------------
PR: https://git.openjdk.java.net/jdk/pull/8740
More information about the hotspot-compiler-dev
mailing list