<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>On Mar 29, 2013, at 10:15 PM, Shuxin Yang <<a href="mailto:shuxin.llvm@gmail.com">shuxin.llvm@gmail.com</a>> wrote:</div><div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="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;">Author: shuxin_yang<br>Date: Fri Mar 29 21:15:01 2013<br>New Revision: 178409<br><br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=178409&view=rev">http://llvm.org/viewvc/llvm-project?rev=178409&view=rev</a><br>Log:<br>Implement XOR reassociation. It is based on following rules:<br><br> rule 1: (x | c1) ^ c2 => (x & ~c1) ^ (c1^c2),<br>    only useful when c1=c2<br> rule 2: (x & c1) ^ (x & c2) = (x & (c1^c2))<br> rule 3: (x | c1) ^ (x | c2) = (x & c3) ^ c3 where c3 = c1 ^ c2<br> rule 4: (x | c1) ^ (x & c2) => (x & c3) ^ c1, where c3 = ~c1 ^ c2<br></div></blockquote></div><br><div>We can do better for rule 3.  It simplifies to (~x & c3).</div><div><br></div><div>- Steve</div></body></html>