RFR: 8221542: ~15% performance degradation due to less optimized inline decision
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Sat Apr 20 03:18:08 UTC 2019
>> After some explorations I decided to keep original behavior for
>> immature profiles (profile.count == -1).
>
> I agree.
>
> I have two questions here.
>
> 1. What's the difference of the following two if statements?
> -------------------------------------------------
> + if (!callee_method->was_executed_more_than(0)) return true; //
> callee was never executed
> +
> + if (caller_method->is_not_reached(caller_bci)) return true; // call
> site not resolved
> -------------------------------------------------
> I think only one of them is needed.
The checks are complimentary: one inspects callee and the other looks at
call site.
"!callee_method->was_executed_more_than(0)" ensures that callee was
executed at least once.
"caller_method->is_not_reached(caller_bci)" inspects the state of the
call site. If corresponding CP entry is not resolved, then the call site
isn't reached. If is_not_reached() returns false, it's not a definitive
answer: there's still a chance the site is not reached - consider the
case of virtual calls where callee_method may differ for the same
resolved method.
> 2. Does the assert in InlineTree::is_not_reached(...) make sense?
> Since we have
> -------------------------------------------------
> if (profile.count() > 0) return false; // reachable according to profile
> -------------------------------------------------
> and
> -------------------------------------------------
> if (profile.count() == -1) {...}
> -------------------------------------------------
> before
> -------------------------------------------------
> assert(profile.count() == 0, "sanity");
> -------------------------------------------------
> is the assert redundant?
Asserts are intended to be redundant :-) But still catch bugs from time
to time.
This one, in particular, checks invariant on profile.count() >= -1
(which is not very useful by itself), but also stresses that
"profile.count() == 0" case is being processed.
Best regards,
Vladimir Ivanov
More information about the hotspot-compiler-dev
mailing list