RFR(S): 8202399:) [C1] LIRGenerator::do_CheckCast needs to exclude is_invokespecial_receiver_check() when using PatchAlot
David Holmes
david.holmes at oracle.com
Mon Apr 30 21:07:53 UTC 2018
Ping! This is quite simple and also quite urgent. (It's blocking 8200167
which in turn is blocking nestmates).
Thanks,
David
On 30/04/2018 5:34 PM, David Holmes wrote:
> Testing completed. No issues.
>
> David
>
> On 30/04/2018 1:03 PM, David Holmes wrote:
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8202399
>> webrev: http://cr.openjdk.java.net/~dholmes/8202399/webrev/
>>
>> JDK-8168699 introduced a special case for
>> is_invokespecial_receiver_check() in LIRGenerator::do_CheckCast:
>>
>> } else if (x->is_invokespecial_receiver_check()) {
>> assert(patching_info == NULL, "can't patch this");
>> stub = new DeoptimizeStub(info_for_exception,
>> Deoptimization::Reason_class_check,
>> Deoptimization::Action_none);
>>
>> but overlooked a potential bad interaction with PatchAlot. This can
>> lead to the assertion failure as observed during testing for
>> JDK-8200167 with Graal. The proposed fix (supplied by Vladimir) is
>> quite simple but needs to be applied to each of the CPU specific files:
>>
>> diff --git a/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
>> b/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
>> --- a/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
>> +++ b/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
>> @@ -1314,7 +1314,7 @@
>> LIRItem obj(x->obj(), this);
>>
>> CodeEmitInfo* patching_info = NULL;
>> - if (!x->klass()->is_loaded() || (PatchALot &&
>> !x->is_incompatible_class_change_check())) {
>> + if (!x->klass()->is_loaded() || (PatchALot &&
>> !x->is_incompatible_class_change_check() &&
>> !x->is_invokespecial_receiver_check())) {
>>
>> Testing:
>> - hotspot/jtreg/compiler (complete)
>> - hs-comp-precheckin (once mach5 is available)
>>
>> Thanks,
>> David
More information about the hotspot-compiler-dev
mailing list