Fix misoptimization of:  xor i1 (icmp eq (X, C1), icmp s[lg]t (X, C2))


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56834 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp
index 9023db7..6cac395 100644
--- a/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -3023,7 +3023,7 @@
       I.setOperand(1, RHSNeg);
       return &I;
     }
- 
+
   // If the sign bits of both operands are zero (i.e. we can prove they are
   // unsigned inputs), turn this into a urem.
   if (I.getType()->isInteger()) {
@@ -4205,7 +4205,8 @@
           // Ensure that the larger constant is on the RHS.
           ICmpInst *LHS = cast<ICmpInst>(Op0);
           bool NeedsSwap;
-          if (ICmpInst::isSignedPredicate(LHSCC))
+          if (ICmpInst::isEquality(LHSCC) ? ICmpInst::isSignedPredicate(RHSCC)
+                                          : ICmpInst::isSignedPredicate(LHSCC))
             NeedsSwap = LHSCst->getValue().sgt(RHSCst->getValue());
           else
             NeedsSwap = LHSCst->getValue().ugt(RHSCst->getValue());