RFR (S) 8222446: assert(C->env()->system_dictionary_modification_counter_changed()) failed: Must invalidate if TypeFuncs differ
dean.long at oracle.com
dean.long at oracle.com
Tue Jul 9 21:40:41 UTC 2019
On 7/9/19 2:16 PM, coleen.phillimore at oracle.com wrote:
>
>
> On 7/9/19 5:06 PM, dean.long at oracle.com wrote:
>> The updated comment sounds good. Now that you have removed the only
>> place that was failing with retry_class_loading_during_parsing(), we
>> should be able to remove that method and its uses. That gets rid of
>> the only way to "retry forever" vs the remaining and presumably safe
>> "down-grade and retry just once more". Or you can file an RFE to
>> clean that up.
>
> Thanks Dean. I noticed that
> C2Compiler::retry_class_loading_during_parsing());
>
> is now not used with my change but didn't want to clean it up with
> this change. I'll file an RFE to clean it up (or find some other use
> for it in the compiler code). What is the remaining "downgrade and
> retry just once more" option?
>
The remaining are retry_no_subsuming_loads(),
retry_no_escape_analysis(), and has_boxed_value() here:
https://java.se.oracle.com/source/xref/jdk-jdk/open/src/hotspot/share/opto/c2compiler.cpp#112
Notice that they all set some kind of flag to disable the current
failure, preventing infinite loops.
dl
> Thanks for the help!
> Coleen
>
>>
>> dl
>>
>> On 7/8/19 2:19 PM, coleen.phillimore at oracle.com wrote:
>>>
>>> Hi, From offline discussions, I updated the code in
>>> Parse::do_exits() to make the method not compilable if the return
>>> types don't match. Otherwise it would revert a change that Volker
>>> made to prevent infinite compilation loops. It seems that the
>>> compiler code has been changed to no longer exercise this path
>>> (ShouldNotReachHere never reached), so keeping the conservative path
>>> seemed safest.
>>>
>>> open webrev at
>>> http://cr.openjdk.java.net/~coleenp/2019/8222446.02/webrev
>>>
>>> I changed the comment Dean, it might need help rewording.
>>>
>>> Tested with tier1-8.
>>>
>>> Thanks,
>>> Coleen
>>>
>>> On 6/21/19 4:44 PM, coleen.phillimore at oracle.com wrote:
>>>>
>>>> Dean, Thank you for reviewing and for your help and discussion of
>>>> this change.
>>>>
>>>> On 6/21/19 3:48 PM, dean.long at oracle.com wrote:
>>>>> For the most part, this looks good. I only have a couple concerns:
>>>>>
>>>>> 1) The distinction in both validate_compile_task_dependencies
>>>>> functions between "dependencies failed" and "dependencies invalid"
>>>>> is even more fuzzy after this change. I suggest filing an RFE to
>>>>> remove this distinction.
>>>>
>>>> Yes, in jvmciRuntime I had to carefully preserve this logic or some
>>>> tests failed. I'll file an RFE for you.
>>>>>
>>>>> 2) In Parse::do_exits(), we don't know that concurrent class
>>>>> loading didn't cause the problem. We should be optimistic and
>>>>> allow the retry:
>>>>> C->record_failure(C2Compiler::retry_class_loading_during_parsing());
>>>>> rather than more drastic
>>>>> C->record_method_not_compilable
>>>>> This is actually what the code did in an earlier revision.
>>>>
>>>> Erik and I were trying to guess which was the right answer. It
>>>> seemed too lucky that you'd do concurrent class loading in this
>>>> time period, so we picked the more drastic answer, but I tested
>>>> both. So I'll change it to the optimistic answer.
>>>>
>>>> Thanks!
>>>> Coleen
>>>>>
>>>>> dl
>>>>>
>>>>> On 6/20/19 10:28 AM, coleen.phillimore at oracle.com wrote:
>>>>>> Summary: Remove SystemDictionary::modification_counter optimization
>>>>>>
>>>>>> See bug for more details. To avoid the assert in the bug report,
>>>>>> it's necessary to also increase the modification counter for
>>>>>> class unloading, which needs special code for concurrent class
>>>>>> unloading. The global counter is used to verify that
>>>>>> validate_dependencies() gets the same answer based on the
>>>>>> subklass hierarchy, but provides a quick exit in production
>>>>>> mode. Removing it may allow more nmethods to be created that
>>>>>> don't depend on the classes that may be loaded while the Method
>>>>>> is being compiled. Performance testing was done on this with no
>>>>>> change in performance. Also investigated the breakpoint setting
>>>>>> code which incremented the modification counter. Dependent
>>>>>> compilations are invalidated using evol_method dependencies, so
>>>>>> updating the system dictionary modification counter isn't
>>>>>> unnecessary.
>>>>>>
>>>>>> Tested with hs-tier1-8 testing, and CTW, and local jvmti/jdi/jdwp
>>>>>> test runs with -Xcomp.
>>>>>>
>>>>>> open webrev at
>>>>>> http://cr.openjdk.java.net/~coleenp/2019/8222446.01/webrev
>>>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8222446
>>>>>>
>>>>>> Thanks,
>>>>>> Coleen
>>>>>
>>>>
>>>
>>
>
More information about the hotspot-dev
mailing list