RFR: keep read barrier on final field access

Aleksey Shipilev shade at redhat.com
Tue Oct 24 13:49:25 UTC 2017


On 10/24/2017 03:43 PM, Aleksey Shipilev wrote:
> On 10/24/2017 03:41 PM, Aleksey Shipilev wrote:
>> On 10/24/2017 03:31 PM, Roland Westrelin wrote:
>>>
>>>> Yes, I agree. Let's emit the read barriers for them today.
>>>
>>> Ok. So that's what we go with, right?
>>>
>>> http://cr.openjdk.java.net/~roland/shenandoah/rbonfinalinstancefield/webrev.02/
>>
>> Yes, I think so!
>>
>> Sorry, but this is still extremely hard to read:
>>
>>  175   if (!((ShenandoahOptimizeStaticFinals && field->is_static() && field->is_final()) ||
>>  176         (ShenandoahOptimizeInstanceFinals && !field->is_static() && field->is_final()) ||
>>  177         (ShenandoahOptimizeStableFinals && field->is_stable()))) {
>>
>> Suggestion:
>>
>>  if ((field->is_final()  &&  field->is_static() && !ShenandoahOptimizeStaticFinals) ||
>>      (field->is_final()  && !field->is_static() && !ShenandoahOptimizeInstanceFinals) ||
>>      (field->is_stable()                        && !ShenandoahOptimizeStableFinals)) {
>>    obj = shenandoah_read_barrier(obj);
>>  }
> 
> Ah, this misses the barriers on non-final/non-stable fields, sorry. Let me try again.

Like this? Basically your original version, simplified and indented:

  if ((ShenandoahOptimizeStaticFinals   && field->is_final() &&  field->is_static()) ||
      (ShenandoahOptimizeInstanceFinals && field->is_final() && !field->is_static()) ||
      (ShenandoahOptimizeStableFinals   && field->is_stable())) {
    // Skip the barrier for special fields
  } else {
    obj = shenandoah_read_barrier(obj);
  }

-Aleksey



More information about the shenandoah-dev mailing list