<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jul 10, 2013 at 2:49 AM, Jay Foad <span dir="ltr"><<a href="mailto:jay.foad@gmail.com" target="_blank">jay.foad@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">On 9 July 2013 19:11, David Majnemer <<a href="mailto:david.majnemer@gmail.com">david.majnemer@gmail.com</a>> wrote:<br>

> Author: majnemer<br>
> Date: Tue Jul  9 13:11:10 2013<br>
> New Revision: 185954<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=185954&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=185954&view=rev</a><br>
> Log:<br>
> ValueTracking: Fix bugs in isKnownToBeAPowerOfTwo<br>
><br>
> (add nsw x, (and x, y)) isn't a power of two if x is zero, it's zero<br>
> (add nsw x, (xor x, y)) isn't a power of two if y has bits set that aren't set in x<br>
<br>
</div>Thanks! Please be very very careful not to introduce subtle<br>
mis-optimizations like this. If in doubt, get someone else to stare at<br>
the code before committing.<br></blockquote><div><br></div><div style>Another option is to use a theorem prover. I personally like <<a href="http://rise4fun.com/z3py">http://rise4fun.com/z3py</a>>, which is super easy to use.</div>
<div style><br></div><div style>-- Sean Silva</div></div></div></div>