Integrated: 8263582: WB_IsMethodCompilable ignores compiler directives

Christian Hagedorn chagedorn at openjdk.java.net
Wed Mar 31 06:37:20 UTC 2021


On Thu, 25 Mar 2021 15:00:39 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:

> While playing around with `WB_IsMethodCompilable` together with `compileonly` I ran into some surprising results for methods that should never be compiled (not part of `compileonly`): `isMethodCompilable` returns true instead of false when such an excluded method was not yet tried to be compiled. 
> 
> The reason for it is that `WB_IsMethodCompilable` directly checks `CompilationPolicy::can_be_compiled()` which calls `Method::is_not_compilable()`. However, the `ExcludeOption` compiler directive is only evaluated lazily upon a compilation attempt. Therefore, if a method was not tried to be compiled, yet, `Method::is_not_compilable()` always returns false, regardless of any set compiler directive.
> 
> I therefore suggest to additionally check the `ExcludeOption` in `WB_IsMethodCompilable`. I also cleaned up some wrong use of `CompLevel_any` and `CompLevel_all` as suggested by @veresov: `CompLevel_any` should only be used to query the state as in `is_*()` methods and `CompLevel_all` when changing the state is in `set_*()` methods.
> 
> Thanks,
> Christian

This pull request has now been integrated.

Changeset: ab6faa60
Author:    Christian Hagedorn <chagedorn at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/ab6faa60
Stats:     141 lines in 5 files changed: 128 ins; 0 del; 13 mod

8263582: WB_IsMethodCompilable ignores compiler directives

Reviewed-by: iveresov, kvn, neliasso

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

PR: https://git.openjdk.java.net/jdk/pull/3195


More information about the hotspot-dev mailing list