<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Nice!<div><br></div><div>In library_call.cpp:</div><div><br></div><div>Could the LibaryCallKit::inline_math*() family of functions be factored with templates to shave a few lines? There is quite a lot of common code.</div><div>I think the overflow idiom insertion can be something like:</div><div><br></div><div><font face="Andale Mono">template&lt;typename OperationNodeType, template OverflowNodeType&gt;</font></div><div><font face="Andale Mono">void LibraryCallKit::inline_overflow(Node* arg1, Node* arg2) {</font></div><div><font face="Andale Mono">&nbsp; Node* op = _gvn.transform(new(C) OperationNodeType(arg1, arg2));&nbsp;<br>&nbsp; Node* of = _gvn.transform(new(C) OverflowNodeType(arg1, arg2));<br>&nbsp; inline_math_mathExact(op, of);<br></font></div><div><font face="Andale Mono">}</font></div><div><br></div><div>In mathexactnode.cpp:</div><div>You’ve already commoned many things up by introducing OverflowINode and OverflowLNode in hierarchy.&nbsp;</div><div>But it feels like some of the code there could factored up as well using template helpers. In many cases the code looks exactly the same for ints and longs, differing only in some types.</div><div><br></div><div><br></div><div>igor</div><div><br></div><div><br>On Jan 23, 2014, at 3:27 AM, Rickard Bäckman &lt;<a href="mailto:rickard.backman@oracle.com">rickard.backman@oracle.com</a>&gt; wrote:<br><br><blockquote type="cite">Hi all,<br><br>this change is going to 9 (and backporting to 8u20). Can I please have<br>this change reviewed?<br><br>The implementation of different j.l.Math.mathExact() didn't work very<br>well with different optimizations because there was one node that<br>generated both control and data. This change has a new implementation<br>where each call to j.l.Math.mathExact() generates a Overflow node and a<br>normal math operation node (in the integer add example: OverflowAddINode<br>and a AddINode). The Overflow node is responsible for generating<br>control.<br><br>In the end we generate assembly like:<br><br>mov rdx, rdi<br>add rdx, rsi<br>...<br>mov rax, rdi<br>add rax, rsi<br>jo &lt;overflow label&gt;<br><br>With one add instruction for the data and one for flags. Future<br>improvements could be to try to match the Overflow and the math<br>operation and remove one of them.<br><br>Bug: <a href="https://bugs.openjdk.java.net/browse/JDK-8027754">https://bugs.openjdk.java.net/browse/JDK-8027754</a><br>Webrev: <a href="http://cr.openjdk.java.net/~rbackman/8027754/">http://cr.openjdk.java.net/~rbackman/8027754/</a><br><br>Thanks<br>/R<br></blockquote><br></div></body></html>