RFR: 8236850: Operations on constant List/Set.of(element) instances does not consistently constant fold
Claes Redestad
claes.redestad at oracle.com
Sat Jan 11 15:11:20 UTC 2020
On 2020-01-11 12:59, forax at univ-mlv.fr wrote:
>
>
> ------------------------------------------------------------------------
>
> *De: *"John Rose" <john.r.rose at oracle.com>
> *À: *"Remi Forax" <forax at univ-mlv.fr>
> *Cc: *"Claes Redestad" <claes.redestad at oracle.com>, "core-libs-dev"
> <core-libs-dev at openjdk.java.net>
> *Envoyé: *Samedi 11 Janvier 2020 02:23:50
> *Objet: *Re: RFR: 8236850: Operations on constant
> List/Set.of(element) instances does not consistently constant fold
>
> On Jan 10, 2020, at 10:47 AM, Remi Forax <forax at univ-mlv.fr
> <mailto:forax at univ-mlv.fr>> wrote:
>
> Seem to be a JIT bug to me,
> the fields of Set12 are declared final not @Stable (even if the
> field storing the instanceof of Set&2 itself is marked @Stable)
> so there is no reason not not let the constant folding happen.
>
>
> It’s part of the contract of @Stable that default values (null) are not
> inlined. The reason for this is that some @Stable variables are lazy,
> and the JIT needs to avoid assuming that default values stay that
> way forever.
>
>
> My bad, reading the patch i've not seen that the fields were both
> annotated with final *and* @Shared.
>
> So it's another occurrence of final not meaning true final but instead
> of having an annotation @TrueScottmanFinal,
> this patch try to use @Stable but it doesn't work if the field is null,
> so the code is twisted to consider 'this' as a marker for null.
Interestingly, -XX:+UnlockExperimentalVMOptions
-XX:+TrustFinalNonStaticFields does not help here: It seems null
"constants" are treated specially even in this case.
>
> In my opinion, it's better to introduce an annotation @TrueScottmanFinal
> instead of using @Stable in a way it was not designed to be used.
While something explicit like this is probably better, I don't think we
should hold back improvements in the short term, even hacky ones like
this. Especially when backing out the hack would be trivial once a
better way of doing things is invented (and the cost of forgetting about
it is low or non-existent).
/Claes
More information about the core-libs-dev
mailing list