[9] RFR(S): 8138651: -XX:DisableIntrinsic matches intrinsics overly eagerly
Nils Eliasson
nils.eliasson at oracle.com
Fri Oct 23 11:49:29 UTC 2015
Hi Zoltan,
Some comments:
IntrinsicDisabledTest.java:
>> return >> System.getProperty("java.vm.name").toLowerCase().contains("server");
>>
think the best practice is to use Platform.isServer() ("import
jdk.test.lib.Platform;").
compilerDirectives.cpp:
I think the canonilization of the list belongs at the construction site,
and not do at the (hot) use site. Preferably we would agree on using the
',' separator in all use case (it only has internal uses). The
compilecommand parser should be straightforward to fix. The VM flag may
be parsed by a common parser that we can't change - then the vmflag
value should be canonicalized during CompilerBroker_init or similar.
If there is some reason to why that doesn't work then I would suggest
moving the canonicalization to DirectiveSet constructor and
DirectiveSet::clone so it only happens once per DirectiveSet.
Best regards,
Nils
On 2015-10-23 09:51, Zoltán Majó wrote:
> Hi Vladimir, > > > thank you for the feedback! > > On 10/07/2015 04:37 AM, Vladimir
Kozlov wrote: >> To be precise DisableIntrinsic is ccstrlist option, not
ccstr. Yes, >> the actual type is the same. >> >> An other concern is
separators since format could be different if >> option specified in
file. Look how we do search in DeoptimizeOnlyAt >> string. > > I've
checked and DisableIntrinsic supports accumulation of argument > values:
If -XX:DisableIntrinsic is specified multiple times on the > command
line, all argument values are concatenated into one argument. > In that
case, '\n' is used as separator. I updated the webrev to > support "\n"
as a separator. > > If DisableIntrinsic is used on the per-method level
(i.e., with > -XX:CompileCommand=option,...), HotSpot expects the type
of > DisableIntrinsic to be 'ccstr' and not 'ccstrlist'. That does not >
allow specifying a list of intrinsics to be disabled (e.g., >
_getInt,_getInVolatile,_hashCode) and is inconsistent with the >
declaration of DisableIntrinsic in globals.hpp. > > To address this
problem, the webrev changes the type of the > per-method level
DisableIntrinsic flag to 'ccstrlist'. For per-method > ccstrlists, the
separator is a whitespace (internally). I've updated > the webrev to
support whitespace as a separator as well. > > I noticed an other
problem while working on this fix: If > DisableIntrinsic is specified
multiple times for the same method, > argument values do not accumulate.
For example, with > >
-XX:CompileCommand=option,sun.misc.Unsafe::putChar,ccstrlist,DisableIntrinsic,_getInt,_getIntVolatile
> >
-XX:CompileCommand=option,sun.misc.Unsafe::putChar,ccstrlist,DisableIntrinsic,_hashCode
> > only '_hashCode' will be disabled for 'putChar'. That is also >
inconsistent with the way DisableIntrinsic works when used globally >
(with -XX:DisableIntrinsic). > > This inconsistency should be addressed,
but as the fix requires > significant changes to CompilerOracle, I would
like to take care of > that separately. I've filed an RFE for that: > >
https://bugs.openjdk.java.net/browse/JDK-8140322 > > I hope that is
fine. > > Here is the updated webrev: >
http://cr.openjdk.java.net/~zmajo/8138651/webrev.01/ > > Testing: - JPRT
(testset hotspot, including the newly added > IntrinsicDisabledTest.java
test). > > Thank you and best regards, > > > Zoltan > >> >> Thanks,
Vladimir >> >> On 10/6/15 8:00 PM, Zoltán Majó wrote: >>> Hi, >>> >>>
>>> please review the patch for JDK-8138651. >>> >>>
https://bugs.openjdk.java.net/browse/JDK-8138651 >>> >>> Problem: The
DisableIntrinsic flag does not disable intrinsics >>> accurately. For
example, -XX:DisableIntrinsic=_copyOfRange >>> disables both the
intrinsic with the ID _copyOfRange and the >>> intrinsic with the
_copyOf. >>> >>> Solution: Change the processing of the DisableIntrinsic
flag >>> (both globally and on a per-method level). >>> >>> Webrev:
http://cr.openjdk.java.net/~zmajo/8138651/webrev.00/ >>> >>> Testing: -
JPRT (testset hotspot); - executed the the newly added >>> test
compiler/intrinsics/IntrinsicDisabledTest.java with/without >>> the fix
on all platforms, the test behaves as expected. >>> >>> Thank you and
best regards, >>> >>> >>> Zoltan >>> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20151023/3dc9440a/attachment.html>
More information about the hotspot-compiler-dev
mailing list