<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Thu, Apr 13, 2017 at 7:40 AM Sanjay Patel <<a href="mailto:spatel@rotateright.com">spatel@rotateright.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg">Thank you for finding the file. Can you share how you knew the difference was in there?<br></div></div></blockquote><div> </div><div>FYI, ;)</div><div><br></div><div>* Assumptions</div><div>  - Changes (in the compiler) should not be affected to entire generated code, at most hundreds of object files.</div><div>  - Changes should not break ABI.</div><div><br></div><div>* Steps</div><div>  0. Do not use Ninja for stage2. Ninja eventually rebuild and overwrite object files even if their timestamp is up-to-date.</div><div>      (Older version of ninja could be available. It didn't use deps db.)</div><div>      Use Makefile generator for stage2.</div><div>  1. Build stage1 clang with the good revision and build the tree with it as stage2. Confirm stage2 fine.</div><div>  2. Add whole object files to the git blob. In that case, I guessed I didn't need to track utils/, tools/ and tools/clang.</div><div>      $ git init</div><div>      $ find lib -type f -name '*.o' | xargs git add</div><div>      $ git commit -mgood</div><div>  3. Build stage1 clang again in a dubious revision and build the stage2 tree from clean. Confirm stage2 reproduces failures.</div><div>  4. Commit changed files identically.</div><div>      $ find lib -type f -name '*.o' -exe git commit -mOBJ-{} {} \;</div><div>  5. Play git-bisect, and move a dubious commit into tail with git-rebase -i, without cleaning stage2.</div><div>      Rebuilding is just doing archiving, linking and testing w/o rebuilding object files.</div><div><br></div><div>Then, you may focus investigating the culprit compile unit.</div><div><br></div><div>The way would be applicable also to find miscompilations between clang and gcc, as far as they are ABI-compatible.</div><div>I have no idea how it could be full-automated.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg">I can see the bug now starts with this existing line of code:<br class="gmail_msg">        assert(LHSC->getValue().ule(LHSC->getValue()));<br class="gmail_msg"></div><br class="gmail_msg">We asserted that a value was equal to itself. :) <br class="gmail_msg"></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Tue, Apr 11, 2017 at 10:00 AM, NAKAMURA Takumi <span dir="ltr" class="gmail_msg"><<a href="mailto:geek4civic@gmail.com" class="gmail_msg" target="_blank">geek4civic@gmail.com</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">ATM, I found the difference in AMDGPUBaseInfo.cpp causes tests failures.<div class="gmail_msg"><div class="m_2901045344353853309h5 gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Wed, Apr 12, 2017 at 12:39 AM Sanjay Patel <<a href="mailto:spatel@rotateright.com" class="gmail_msg" target="_blank">spatel@rotateright.com</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">Thank you for letting me know. I am curious to know how to debug this.<br class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"></div><div class="gmail_extra m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><br class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><div class="gmail_quote m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">On Tue, Apr 11, 2017 at 8:36 AM, NAKAMURA Takumi <span dir="ltr" class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><<a href="mailto:geek4civic@gmail.com" class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">geek4civic@gmail.com</a>></span> wrote:<br class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><blockquote class="gmail_quote m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">Seems it causes miscompilation (or revealing a bug) in AMDGPUCodeGen, in stage 2.<div class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">Investigating.</div><div class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><br class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"></div><div class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><a href="http://bb.pgr.jp/builders/clang-3stage-x86_64-linux/builds/14928" class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">http://bb.pgr.jp/builders/clang-3stage-x86_64-linux/builds/14928</a><br class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"></div></div><div class="m_2901045344353853309m_209695952977136408m_-1237118118437737287HOEnZb m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><div class="m_2901045344353853309m_209695952977136408m_-1237118118437737287h5 m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><br class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><div class="gmail_quote m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"><div dir="ltr" class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">On Tue, Apr 11, 2017 at 2:08 AM Sanjay Patel via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"></div><blockquote class="gmail_quote m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: spatel<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
Date: Mon Apr 10 11:55:57 2017<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
New Revision: 299851<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=299851&view=rev" rel="noreferrer" class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=299851&view=rev</a><br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
Log:<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
[InstCombine] fix matching of or-of-icmps constants (PR32524)<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
Also, make the same change in and-of-icmps and remove a hack for detecting that case.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
Finally, add some FIXME comments because the code duplication here is awful.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
This should fix the remaining IR problem noted in:<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<a href="https://bugs.llvm.org/show_bug.cgi?id=32524" rel="noreferrer" class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=32524</a><br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
Modified:<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
    llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
    llvm/trunk/test/Transforms/InstCombine/or.ll<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp?rev=299851&r1=299850&r2=299851&view=diff" rel="noreferrer" class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp?rev=299851&r1=299850&r2=299851&view=diff</a><br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
==============================================================================<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp (original)<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp Mon Apr 10 11:55:57 2017<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
@@ -807,6 +807,7 @@ Value *InstCombiner::FoldAndOfICmps(ICmp<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
     }<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   }<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+  // FIXME: The code below is duplicated in FoldOrOfICmps.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   // From here on, we only handle:<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   //    (icmp1 A, C1) & (icmp2 A, C2) --> something simpler.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   if (Val != Val2)<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
@@ -825,11 +826,14 @@ Value *InstCombiner::FoldAndOfICmps(ICmp<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   // Ensure that the larger constant is on the RHS.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   bool ShouldSwap;<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-  if (CmpInst::isSigned(PredL) ||<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-      (ICmpInst::isEquality(PredL) && CmpInst::isSigned(PredR)))<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-    ShouldSwap = LHSC->getValue().sgt(RHSC->getValue());<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-  else<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+  if (CmpInst::isUnsigned(PredL) || CmpInst::isUnsigned(PredR)) {<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+    // We have an unsigned compare (possibly with an equality compare), so treat<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+    // the constants as unsigned.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
     ShouldSwap = LHSC->getValue().ugt(RHSC->getValue());<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+  } else {<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+    // Equality transforms treat the constants as signed.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+    ShouldSwap = LHSC->getValue().sgt(RHSC->getValue());<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+  }<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   if (ShouldSwap) {<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
     std::swap(LHS, RHS);<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
@@ -877,10 +881,6 @@ Value *InstCombiner::FoldAndOfICmps(ICmp<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
     case ICmpInst::ICMP_SGT: // (X != 13 & X s> 15) -> X s> 15<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
       return RHS;<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
     case ICmpInst::ICMP_NE:<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-      // Special case to get the ordering right when the values wrap around<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-      // zero.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-      if (LHSC->getValue() == 0 && RHSC->getValue().isAllOnesValue())<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-        std::swap(LHSC, RHSC);<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
       if (LHSC == SubOne(RHSC)) { // (X != 13 & X != 14) -> X-13 >u 1<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
         Constant *AddC = ConstantExpr::getNeg(LHSC);<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
         Value *Add = Builder->CreateAdd(Val, AddC, Val->getName() + ".off");<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
@@ -1727,6 +1727,7 @@ Value *InstCombiner::FoldOrOfICmps(ICmpI<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
         return Builder->CreateICmpULE(Val, LHSC);<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   }<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+  // FIXME: The code below is duplicated in FoldAndOfICmps.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   // From here on, we only handle:<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   //    (icmp1 A, C1) | (icmp2 A, C2) --> something simpler.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   if (Val != Val2)<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
@@ -1745,11 +1746,14 @@ Value *InstCombiner::FoldOrOfICmps(ICmpI<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   // Ensure that the larger constant is on the RHS.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   bool ShouldSwap;<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-  if (CmpInst::isSigned(PredL) ||<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-      (ICmpInst::isEquality(PredL) && CmpInst::isSigned(PredR)))<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-    ShouldSwap = LHSC->getValue().sgt(RHSC->getValue());<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-  else<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+  if (CmpInst::isUnsigned(PredL) || CmpInst::isUnsigned(PredR)) {<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+    // We have an unsigned compare (possibly with an equality compare), so treat<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+    // the constants as unsigned.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
     ShouldSwap = LHSC->getValue().ugt(RHSC->getValue());<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+  } else {<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+    // Equality transforms treat the constants as signed.<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+    ShouldSwap = LHSC->getValue().sgt(RHSC->getValue());<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+  }<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   if (ShouldSwap) {<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
     std::swap(LHS, RHS);<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
Modified: llvm/trunk/test/Transforms/InstCombine/or.ll<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/or.ll?rev=299851&r1=299850&r2=299851&view=diff" rel="noreferrer" class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/or.ll?rev=299851&r1=299850&r2=299851&view=diff</a><br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
==============================================================================<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
--- llvm/trunk/test/Transforms/InstCombine/or.ll (original)<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+++ llvm/trunk/test/Transforms/InstCombine/or.ll Mon Apr 10 11:55:57 2017<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
@@ -223,10 +223,9 @@ define i1 @test19(i32 %A) {<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
 define i1 @or_icmps_eq_diff1(i32 %x) {<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
 ; CHECK-LABEL: @or_icmps_eq_diff1(<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 %x, -1<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i32 %x, 0<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-; CHECK-NEXT:    [[LOGIC:%.*]] = or i1 [[CMP1]], [[CMP2]]<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
-; CHECK-NEXT:    ret i1 [[LOGIC]]<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+; CHECK-NEXT:    [[X_OFF:%.*]] = add i32 %x, 1<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[X_OFF]], 2<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
+; CHECK-NEXT:    ret i1 [[TMP1]]<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
 ;<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   %cmp1 = icmp eq i32 %x, -1<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
   %cmp2 = icmp eq i32 %x, 0<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
_______________________________________________<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
llvm-commits mailing list<br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="m_2901045344353853309m_209695952977136408m_-1237118118437737287m_1153841982025333671gmail_msg m_2901045344353853309m_209695952977136408gmail_msg gmail_msg">
</blockquote></div>
</div></div></blockquote></div><br class="m_2901045344353853309m_209695952977136408gmail_msg gmail_msg"></div>
</blockquote></div></div></div></div>
</blockquote></div><br class="gmail_msg"></div>
</blockquote></div></div>