On Sat, 22 Jun 2024 09:30:25 GMT, Evgeny Astigeevich <eastigeev...@openjdk.org> 
wrote:

>> A Java method can become non-compilable if there are issues with its 
>> compilation or if its compiled version causes problems. Additionally, a 
>> method can be marked as non-compilable using a compile command or a compiler 
>> directive. Since compiler directives can be updated, a directive that 
>> disables a method's compilation can be changed or removed.
>> 
>> Currently, when a Java method is marked as non-compilable, the reason for 
>> this status is unknown. If a change in a compiler directive makes the method 
>> compilable again, we cannot clear the non-compilable status because we don't 
>> know if the directive initially caused the method to become non-compilable.
>> 
>> To resolve the issue two method flags are introduced: `is_c1_exclude` and 
>> `is_c2_excluded`. They mean a Java method is excluded from compilation by a 
>> directive. With these flags we can find out a Java method has been excluded 
>> with a directive. If the directive changes and allows compilation of the 
>> method we can detect this and clear the non-compilable status.
>> 
>> As accesses to flags must be race free we have to remove getting a directive 
>> from `CompileBroker::compile_method`. We combine two 
>> `CompileBroker::compile_method` into one. We also move calculation whether 
>> compilation is blocking into `CompileBroker::compile_method_base`. The 
>> directive used for that calculation is passed to a compile task, so a 
>> compile task does not need to get it again.
>> 
>> A regression test is added.
>> 
>> Tested fastdebug build on Linux AArch64, Linux x86_64 and Windows Server 
>> 2019 x86_64:
>> - Tier1/2/3 passed.
>
> Evgeny Astigeevich has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Fix data race

Changes requested by dfenacci (Committer).

src/hotspot/share/compiler/compileBroker.cpp line 1336:

> 1334:   }
> 1335: 
> 1336:   AbstractCompiler *comp = CompileBroker::compiler(comp_level);

Do we need to change this?

src/hotspot/share/compiler/compileBroker.cpp line 1563:

> 1561: // See if this compilation is not allowed.
> 1562: bool CompileBroker::compilation_is_prohibited(const methodHandle& 
> method, int osr_bci, int comp_level) {
> 1563:   assert(compiler(comp_level) != nullptr, "Ensure we have a compiler");

Are you sure `compiler(comp_level)` can never be `nullptr` (not even 
potentially)? (it seems so to me too but just to make sure)

-------------

PR Review: https://git.openjdk.org/jdk/pull/19637#pullrequestreview-2148291624
PR Review Comment: https://git.openjdk.org/jdk/pull/19637#discussion_r1658904857
PR Review Comment: https://git.openjdk.org/jdk/pull/19637#discussion_r1660722626

Reply via email to