[InstCombine] Pull simple checks above a more complicated one. NFCI
authorCraig Topper <craig.topper@intel.com>
Tue, 21 Aug 2018 19:17:00 +0000 (19:17 +0000)
committerCraig Topper <craig.topper@intel.com>
Tue, 21 Aug 2018 19:17:00 +0000 (19:17 +0000)
I'm assuming its easier to make sure the RHS of an XOR is all ones than it is to check for the many select patterns we have. So lets check that first. Same with the one use check.

llvm-svn: 340321

llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp

index a2dea10..e631e73 100644 (file)
@@ -2919,12 +2919,10 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) {
   //   %res = select i1 %cmp2, i32 %x, i32 %noty
   //
   // Same is applicable for smin/umax/umin.
-  {
+  if (match(Op1, m_AllOnes()) && Op0->hasOneUse()) {
     Value *LHS, *RHS;
     SelectPatternFlavor SPF = matchSelectPattern(Op0, LHS, RHS).Flavor;
-    if (Op0->hasOneUse() && SelectPatternResult::isMinOrMax(SPF) &&
-        match(Op1, m_AllOnes())) {
-
+    if (SelectPatternResult::isMinOrMax(SPF)) {
       Value *X;
       if (match(RHS, m_Not(m_Value(X))))
         std::swap(RHS, LHS);