<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">On Sep 28, 2016, at 9:42 AM, Krystal Mok <<a href="mailto:rednaxelafx@gmail.com" class="">rednaxelafx@gmail.com</a>> wrote:<br class=""><div><blockquote type="cite" class=""><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">I do also have another patch for the general case for "unused unloaded arguments". I haven't gotten around to polish and test that patch yet, but since we're seeing a good motivation on the OpenJDK side as well, I may as well go back and get that patch ready soon.</div><div style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><div style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">A null guard is a good way to go. It's basically the same kind of logic that C2 OSR entry already uses. In this case, at a call site, a null guard on the caller-side against an argument whose type is unloaded is one way to do it.</div></div></blockquote><div><br class=""></div>This is the fix I would prefer for the inliner.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">(There are of course other alternatives. e.g. If we focus on the callee-side, in a compiler with a mixed top-down / bottom-up inlining heuristics system, the (devirtualized if needed) callee can be inspected first to see if an argument of unloaded type is never used or not. If it is never used, don't even bother inserting the null guard on the caller-side, and just go ahead and inline would be good and safe. C2 doesn't have this luxury yet so tackling the problem with a caller-side solution is easier to do.)</div></div></blockquote></div><br class=""><div class="">I'd like to do more in this direction.  The EA function summarizer could be overloaded to also gather data on the usage of arguments (as well as their escape status).  For example, if an argument is used to gate a branch (somehow), then having that argument be constant should "add points" to the heuristic that decides inlining.  *In general*, constant arguments should be an "argument" to raise the likelihood of inlining a call.</div><div class=""><br class=""></div><div class="">I'm going to guess that this work would be better done in Graal, but we don't have that luxury yet.</div><div class=""><br class=""></div><div class="">— John</div></body></html>