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