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 07:34:41 UTC 2018
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