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

Vladimir Ivanov vlivanov at openjdk.java.net
Fri Apr 9 11:18:11 UTC 2021


On Fri, 9 Apr 2021 11:04:18 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:

>> 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.
>
> src/hotspot/share/prims/vectorSupport.cpp line 97:
> 
>> 95:       case T_LONG:
>> 96:       case T_FLOAT:
>> 97:       case T_DOUBLE: arr->bool_at_put(index,  (*(jbyte*)addr) != 0); break;
> 
> No switch needed anymore. Just leave the  `arr->bool_at_put(index,  (*(jbyte*)addr) != 0)`.
> As an option, consider adding an assert (`assert(is_java_type(bt) && bt != T_BOOLEAN)`.

Actually, I think you can get rid of `is_mask` and just use `elem_bt = T_BOOLEAN` / `bool_at_put(index, (*(jboolean*)addr))`.

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

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


More information about the hotspot-compiler-dev mailing list