<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Oct 18, 2014 at 5:36 PM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.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 dir="ltr"><div class="gmail_extra"><span class=""><br><div class="gmail_quote">On Sat, Oct 18, 2014 at 5:20 PM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@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"><span>On Sat, Oct 18, 2014 at 10:07 AM, Sean Silva <span dir="ltr"><<a href="mailto:chisophugis@gmail.com" target="_blank">chisophugis@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 dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span>On Sat, Oct 18, 2014 at 2:47 AM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@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">InstCombine is not supposed to handle every possible just because it is theoretically possible case.  It's engineered to be a series of engineering tradeoffs.  I don't know what the history of the similar transform is in VisitAdd, it's possible that it wasn't added in a principled way.<br></blockquote><div><br></div></span><div>IIRC I did a cursory look at the blame and it was actually you who showed up for the corresponding transform in VisitAdd. Or maybe you were committing a patch for someone? Probably worth taking a look at the log to see if you remember.</div></div></div></div></blockquote><div><br></div></span><div>I believe it was reduced from the Linux kernel.  Frankly, I fail to see the relevance to whether or not we should accept this patch.</div></blockquote></div><br></span>I think there is utility to ensuring that addition and subtraction support the same fundamental simplifications as it makes things more principled. For example, if some other transformation switched the add to a sub or the user knew one input was negated and thus used a sub to "fix" that, it would be good to not lose the simplification.</div></div></blockquote><div><br></div><div>This transform is matching "(sub (or A B) (xor A B)) -> (and A B)" which is similar to "(add (and A, B) (xor A, B)) -> (or A, B)" but I'm having trouble seeing how the (add (and ... )) could turn into a (sub (or ...)).  If it's possible, then we need this transform without a doubt.</div><div> </div><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 dir="ltr"><div class="gmail_extra"><br></div><div class="gmail_extra">All of this is only really relevant if this is in fact the complementary case for sub as was added for add. What I really wish is that we had a more algebraic way of specifying these things once.</div></div>
</blockquote></div><br></div><div class="gmail_extra">+10</div><div class="gmail_extra">The fact that these transforms need to be expressed this way is not awesome.</div></div>