[lworld+vector] RFR: Merge lworld [v2]

Jatin Bhateja jbhateja at openjdk.org
Mon Jun 26 10:53:04 UTC 2023


> Merge from lworld in lworld+vector, JDK-8292818 made significant modification to FieldInfo by replacing 96 bits fixed set of metadata fields with UNSIGNED5 compressed fields. 
> 
> Other Fixes addressed:-
> 
> A) CDS related: 
>   - All the _VectorPayloadMF*_ classes are part of java.base modules and thus gets archived into a classes.jsa. 
>   - Code for bookkeeping InlineKlassFixedBlock pointer containing  packing/unpacking adapters, exact bundle size etc. is removed from lworld branch, this causes problem in down stream flow accessing those fields.
>   
>   - InstanceKlass::size method takes into account size of InlineKlassFixedBlock and therefore its contents are already part of shared archive, reinitialized the pointer by making an explicit call to _inlineklass_static_block()_ [1] during unshared field restoration.	
> 
>   - Java class structure [2] contains primaryType (pointer to primitive klass mirrors) and secondaryTypes (pointer to primitive values mirrors), these are no-longer getting restored during shared archive loading at VM startup. These pointer are used for class level equality comparison. As a workaround, using -Xshare:off flag during regression testing, this will be fixed in a follow up patch. 
> 
> B) Removed redundant ResourceMarks during field parsing [3], this was resulting into crashes during re-allocations of  __temp_field_info_ (a GrowableArray) due to __nesting_ level mismatch b/w actual allocation site and re-allocation sites. Re-allocations happens because upfront space reservation for growable array do not take into account multifield bundle size. 
> 
> C) JDK-8292818 added a new __index_ field on top regular fields specified in JVM specification (name_index, signature_index, flags_index, access_index) into FieldInfo structure, handled its initialization while parsing multifield[4], injected[5] and user defined fields[6]. 
> 
> D) Small change in VectorBox creation routine for proper initialization[7] of _declared_nonstatic_fields before accessing it[8]. 
> 
> E) De-optimization related:-
>   - De-coupled[9] allocation and re-assignment during vector box re-materialization leveraging existing re-assignment framework[10]. This prevents introducing special handlings for non-vector Locations in existing routines since an InlineTypeNode may have scalar / vector / constant inputs (scalarized multifield bundle initialization during make_default [11]).
> 
>   - nfield count which determines number of field level bookkeeping at SafePoint was initialized using _ciInlineKlass::...

Jatin Bhateja has updated the pull request incrementally with one additional commit since the last revision:

  Review comments resolutions.

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

Changes:
  - all: https://git.openjdk.org/valhalla/pull/866/files
  - new: https://git.openjdk.org/valhalla/pull/866/files/64ed7ffa..0123a199

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=valhalla&pr=866&range=01
 - incr: https://webrevs.openjdk.org/?repo=valhalla&pr=866&range=00-01

  Stats: 16 lines in 1 file changed: 5 ins; 7 del; 4 mod
  Patch: https://git.openjdk.org/valhalla/pull/866.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/866/head:pull/866

PR: https://git.openjdk.org/valhalla/pull/866



More information about the valhalla-dev mailing list