RFR: 8256073: Improve vector rematerialization support
Vladimir Kozlov
kvn at openjdk.java.net
Thu Nov 19 18:19:13 UTC 2020
On Thu, 19 Nov 2020 18:07:58 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:
>> Having #1131, #1132, and #1134 in place, the only missing piece left to have vector rematerialization fully working is support of non-contiguous vector values in vector rematerialization logic. This patch covers that.
>>
>> Current version makes the assumption that vector values are contiguously laid in memory. It's the case for on-stack locations, but for in-register values it's not the case (at least, on x86). Rewritten version doesn't make such assumption for in-register case anymore and processes every vector element independently.
>>
>> (Along the way, the refactoring fixes a bug when handling a corner case: the case when a vector instance is scalarized by EA and the primitive array field (VectorPayload.payload) has a constant value (NULL) is erroneously treated as requiring custom rematerialization and it hits an assert.)
>>
>> Testing (with other relevant patches):
>> - [x] jdk/incubator/vector w/ -XX:+DeoptimizeALot and -XX:UseAVX={3,2,1,0} on AVX512-capable hardware
>> - [x] hs-precheckin-comp, hs-tier1, hs-tier2
>
> src/hotspot/share/prims/vectorSupport.cpp line 94:
>
>> 92: case T_FLOAT: arr->bool_at_put(index, (*(jint*)addr) != 0); break;
>> 93: case T_LONG: // fall-through
>> 94: case T_DOUBLE: arr->bool_at_put(index, (*(jlong*)addr) != 0); break;
>
> Why you push `bool` value for everything?!!!
Okay. After reading code more I understand that array is boolean type for case when `is_mask` is `true`. So changes are correct.
-------------
PR: https://git.openjdk.java.net/jdk/pull/1136
More information about the hotspot-compiler-dev
mailing list