Mercurial > hg > jdk9-shenandoah
changeset 1601:2671addb3319
8130832: Extend the WhiteBox API to provide information about the availability of compiler intrinsics
Summary: Add a new method, sun.hotspot.WhiteBox.isIntrinsicAvailable, that can be used to determine if an intrinsic is available.
Reviewed-by: kvn, jrose
author | zmajo |
---|---|
date | Tue, 28 Jul 2015 19:20:33 +0200 |
parents | 8fd6eeb87860 |
children | f47ccd58ac92 |
files | test/lib/sun/hotspot/WhiteBox.java |
diffstat | 1 files changed, 24 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/test/lib/sun/hotspot/WhiteBox.java Thu Jul 23 15:27:17 2015 -0700 +++ b/test/lib/sun/hotspot/WhiteBox.java Tue Jul 28 19:20:33 2015 +0200 @@ -182,6 +182,30 @@ Objects.requireNonNull(method); return isMethodQueuedForCompilation0(method); } + // Determine if the compiler corresponding to the compilation level 'compLevel' + // and to the compilation context 'compilation_context' provides an intrinsic + // for the method 'method'. An intrinsic is available for method 'method' if: + // - the intrinsic is enabled (by using the appropriate command-line flag) and + // - the platform on which the VM is running provides the instructions necessary + // for the compiler to generate the intrinsic code. + // + // The compilation context is related to using the DisableIntrinsic flag on a + // per-method level, see hotspot/src/share/vm/compiler/abstractCompiler.hpp + // for more details. + public boolean isIntrinsicAvailable(Executable method, + Executable compilationContext, + int compLevel) { + Objects.requireNonNull(method); + return isIntrinsicAvailable0(method, compilationContext, compLevel); + } + // If usage of the DisableIntrinsic flag is not expected (or the usage can be ignored), + // use the below method that does not require the compilation context as argument. + public boolean isIntrinsicAvailable(Executable method, int compLevel) { + return isIntrinsicAvailable(method, null, compLevel); + } + private native boolean isIntrinsicAvailable0(Executable method, + Executable compilationContext, + int compLevel); public int deoptimizeMethod(Executable method) { return deoptimizeMethod(method, false /*not osr*/); }