[InstCombine] fix profitability equation for max-of-nots transform

As the test change shows, we can increase the critical path by adding
a 'not' instruction, so make sure that we're actually removing an
instruction if we do this transform.

This transform could also cause us to miss folds of min/max pairs.

llvm-svn: 286315
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
index 6bee87c..06b769b 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
@@ -1308,15 +1308,14 @@
     if ((SPF == SPF_SMAX || SPF == SPF_UMAX) &&
         IsFreeToInvert(LHS, LHS->hasNUses(2)) &&
         IsFreeToInvert(RHS, RHS->hasNUses(2))) {
-      // This transform adds a not operation, and that extra cost needs to be
-      // justified. We look for simplifications that will result from applying
-      // this rule:
-      bool Profitable =
-          (LHS->hasNUses(2) && match(LHS, m_Not(m_Value()))) ||
-          (RHS->hasNUses(2) && match(RHS, m_Not(m_Value()))) ||
+      // For this transform to be profitable, we need to eliminate at least two
+      // 'not' instructions if we're going to add one 'not' instruction.
+      int NumberOfNots =
+          (LHS->hasNUses(2) && match(LHS, m_Not(m_Value()))) +
+          (RHS->hasNUses(2) && match(RHS, m_Not(m_Value()))) +
           (SI.hasOneUse() && match(*SI.user_begin(), m_Not(m_Value())));
 
-      if (Profitable) {
+      if (NumberOfNots >= 2) {
         Value *NewLHS = Builder->CreateNot(LHS);
         Value *NewRHS = Builder->CreateNot(RHS);
         Value *NewCmp = SPF == SPF_SMAX