<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">On Nov 3, 2014, at 9:40 AM, Dean Long <<a href="mailto:dean.long@oracle.com">dean.long@oracle.com</a>> wrote:<br><div><br class="Apple-interchange-newline"><blockquote type="cite"><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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; float: none; display: inline !important;">By the way, do we know why the lcm change caused  a regression?  Is reordering the worklist</span><br style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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;"><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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; float: none; display: inline !important;">using pop() a design feature?</span><br style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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;"></blockquote></div><br><div>It's simple a data structure trick.  The worklist is logically unordered, but physically packed into an array.</div><div><br></div><div>If you remove an item from an array, preserving order, you have to move O(N) items to close up the gap.</div><div><br></div><div>If you don't care about order, you can remove an item with O(1) move, as shown in the restored code.</div><div><br></div><div>It is possible (though unlikely) that the performance regression was due to JIT compilation slowdown.</div><div><br></div><div>In the JIT we try hard to use O(1) algorithms instead of O(N) ones, O(N) instead of O(N^2), etc.  It's obvious once you state it, but it is non-trivial to avoid adding an exponent (turning O(1) into O(N), etc.).</div><div><br></div><div>Generally speaking, if there is a problem in the JIT due to optimization order (as there seems to have been on ARM) the solution is almost certainly not to add to the exponent of our algorithm, but to find some sort of targeted extraction of items from the worklist in the needed order.</div><div><br></div><div> John</div></body></html>