RFR: 8221542: ~15% performance degradation due to less optimized inline decision

Jie Fu fujie at loongson.cn
Sat Apr 20 02:57:34 UTC 2019


Hi Vladimir,

> I'm OK with dropping was_executed_more_than(1) check. I hoped it could 
> help catching the case when exception is thrown before the call, but 
> the check itself causes more problems than I thought.

Thank you.

> 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.

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?

What do you think?
Thanks.

Best regards,
Jie



More information about the hotspot-compiler-dev mailing list