Fwd: RFR (S) 8140650: (preliminary) Method::is_accessor should cover getters and setters for all types
sgehwolf at redhat.com
Mon Nov 2 09:27:15 UTC 2015
Thanks for bringing this to our attention!
On Fri, 2015-10-30 at 17:21 +0300, Aleksey Shipilev wrote:
> There is a suggested change that affects Zero: UseFastAccessorMethods is
> used only in Zero after JDK-8003426. We would like to make the
> is_accessor matcher a proper one, which raises some questions below:
> -------- Forwarded Message --------
> Subject: RFR (S) 8140650: (preliminary) Method::is_accessor should cover
> getters and setters for all types
> Date: Wed, 28 Oct 2015 18:31:46 +0300
> From: Aleksey Shipilev <aleksey.shipilev at oracle.com>
> To: hotspot-runtime-dev <hotspot-runtime-dev at openjdk.java.net>
> I have been reading the compiler code recently to check if
> setters/getters are actually treated specially in inline policy. They
> do, and inliner relies on Method::is_accessor to detect them.
> But then I realized that Method::is_accessor implementation only accepts
> the specific shapes of getters, and completely ignores setters (contrary
> to what is spelled in the "doc" comment!):
> This makes compilers to ignore many trivial methods that we might
> otherwise inline when all other inline hints have failed. With that in
> mind, I did a proof-of-concept change, which passes JPRT and a new
> compiler-specific regression test:
> I'll run more testing, after we figure the fate for interpreter.cpp
> change. It is prompted by Zero's fast accessor implementation that only
> accepts the specific getter shape. Now, we can go three routes:
> a) Ignore the issue, and keep Method::is_simple_accessor;
> b) Fix Zero's fast accessor to accept all the shapes.
> c) Remove fast accessors from Zero (I see UseFastAccessorMethods is
> marked as obsolete), and thus probably remove the notion of "accessor"
> from interpreter completely (?);
> Current patch does (a), and I'm leaning to keep it that way, letting
> Zero to handle more in future. If we care more about Zero, we might go
> for (b) -- although it seems to deserve a separate follow-up RFE. And if
> we don't, we can go for (c).
It should be fine to go with (a) and also file a follow-up RFE for Zero
in order to implement (b). I can take this task on if you wish. Please
let me know about the RFE bug you file.
More information about the zero-dev