RFR: 8264954: unified handling for VectorMask object re-materialization during de-optimization

Jatin Bhateja jbhateja at openjdk.java.net
Fri Apr 9 07:30:28 UTC 2021


Following flow describes object reconstruction for de-optimization:-
1)	PhaseVector::scalarize_vbox_node() creates SafePointScalarObjectNode to captures the box type information, also it connects to node holding the boxed value.
2)	During code emit phase (PhaseOutput) C2 process above information to dumps ObjectValue holding the box information and LocationValue to holding the value information into ScopeDescriptor corresponding to Safepoint PC.
3)	De-optimization blobs dump the value held in registers to the stack locations using RegisterSave::save_live_registers() and a mapping b/w register and its stack location is added to RegisterMap.
4)	During de-optimization, compiled frame objects are re-allocated using identity information held in ObjectValue and their fields are initialized using values held in the stack locations accessed through register-stack mappings. 

By inserting a VectorStoreMaskNode before stitching the mask holding node to Safepoint we make sure that value held in opmask/vector register is transferred to a byte vector. Thus rest of the flow works as it is, stack location will hold the value in the form of a byte array irrespective of the box shape.

tier1-tier3 regressions are clean with UseAVX=2/3.

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

Commit messages:
 - 8264954: unified handling for VectorMask object re-materialization during de-optimization

Changes: https://git.openjdk.java.net/jdk/pull/3408/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3408&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8264954
  Stats: 51 lines in 2 files changed: 29 ins; 15 del; 7 mod
  Patch: https://git.openjdk.java.net/jdk/pull/3408.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/3408/head:pull/3408

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


More information about the hotspot-compiler-dev mailing list