[lworld+vector] RFR: 8311610: [lworld+vector] Clean-up of vector allocation in class VectorSupport [v2]

Xiaohong Gong xgong at openjdk.org
Tue Jul 11 10:07:48 UTC 2023


On Fri, 7 Jul 2023 13:14:33 GMT, Xiaohong Gong <xgong at openjdk.org> wrote:

>> PR [1] has added the vector supports for field re-assigning after object re-allocation in `deoptimization.cpp`. The similar vector
>> and vector payload re-allocation code in `vectorSupport.cpp` can be removed now.
>> 
>> Besides, there is an issue in current vector payload allocation code in `vectorSupport.cpp`, that the multi-fields are forgotten
>> to be assigned after the payload object is allocated (see [2]). This method is called separately during deoptimization (see [3]).
>> This makes several Vector API jtreg test results incorrect. And either assigning the fields by calling `Deoptimization::reassign_fields_by_klass()` after it or directly going to the normal re-allocation path in `deoptimization.cpp` can fix the issue. I prefer the latter one. Hence the similar code in `vectorSupport.cpp` is needless and can be removed.
>> 
>> This patch also fixes a crash when printing out the JVM state, which is caused by the additional multi-fields passed to a safepoint. Normally, the fields number passed to a safepoint is the same with the klass's non-static fields number. But it's different for multi-fields. Only the `multifield_base` is added to the klass's non-static field list. Hence if all the un-vectorized multi-fields are passed to a safepoint, the fields number is larger than the klass's non-static fields number. And the array access at [4] throws exception due to out of range index.
>> 
>> [1] https://github.com/openjdk/valhalla/pull/866
>> [2] https://github.com/openjdk/valhalla/blob/lworld%2Bvector/src/hotspot/share/prims/vectorSupport.cpp#L281
>> [3] https://github.com/openjdk/valhalla/blob/lworld%2Bvector/src/hotspot/share/runtime/deoptimization.cpp#L1282
>> [4] https://github.com/openjdk/valhalla/blob/lworld%2Bvector/src/hotspot/share/opto/callnode.cpp#L527
>
> Xiaohong Gong has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Set larval state for inline type objects

Hi, the latest change fixed the offset issue for multifields during deoptimization. With this fixing, all the tests (in Int256VectorTests) can pass on NEON.  And the crash I mentioned above can be fixed as well. Please help to take a look. Thanks a lot!

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

PR Comment: https://git.openjdk.org/valhalla/pull/882#issuecomment-1630535665



More information about the valhalla-dev mailing list