RFR: 8263125: During deoptimization vectors should reassign scalarized payload after all objects are reallocated. [v2]

Vladimir Ivanov vlivanov at openjdk.java.net
Wed Mar 10 22:10:08 UTC 2021


On Wed, 10 Mar 2021 20:08:24 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:

>> Currently during deoptimization Vector's `payload` field values are restored during Vector reallocation: 
>> https://github.com/openjdk/jdk/blob/master/src/hotspot/share/prims/vectorSupport.cpp#L155 
>> 
>> But for scalar-replaced values this is not correct because payload box object could be re-allocated after allocation of this vector. Scalar-replaced `payload` should be restored during regular fields reassignment (`Deoptimization::reassign_fields()` change).
>> 
>> I renamed incorrect `eliminate_*` names for methods which restore/reallocate objects and locks.
>> 
>> I added checks for EliminateAutoBox and EnableVectorAggressiveReboxing optimizations which can replace allocations with scalar objects independent from Escape Analysis. 
>>  
>> I added prints for unexpected StackValue values (stackValue.cpp) and for Vector debug info location type (location.cpp).
>
> Vladimir Kozlov has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Update Copyright year

I vividly remember I fixed the very same problem before in Panama.

More specifically, why doesn't `VectorSupport::allocate_vector_payload` handle the case?

Handle VectorSupport::allocate_vector_payload(InstanceKlass* ik, frame* fr, RegisterMap* reg_map, ScopeValue* payload, TRAPS) {
  if (payload->is_location() &&
      payload->as_LocationValue()->location().type() == Location::vector) {
    // Vector value in an aligned adjacent tuple (1, 2, 4, 8, or 16 slots).
    Location location = payload->as_LocationValue()->location();
    return allocate_vector_payload_helper(ik, fr, reg_map, location, THREAD); // safepoint
  } else {
    // Scalar-replaced boxed vector representation.
    StackValue* value = StackValue::create_stack_value(fr, reg_map, payload);
    return value->get_obj();
  }
}

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

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


More information about the hotspot-dev mailing list