This helper is called by tree_expr_nonzero_warnv_p(), a helper that is
gating a call to fold_overflow_warning() that we want to eliminate.

The helper is renamed to remove the "warn" from its name since it
doesn't throw or set any overflow warnings anymore.

gcc/ChangeLog:

        * fold-const.cc (tree_expr_nonzero_warnv_p): Removed
        strict_overflow_p flag from tree_binary_nonzero_p call.
        (tree_binary_nonzero_warnv_p): Renamed to tree_binary_nonzero_p.
        (tree_binary_nonzero_p): Removed strict_overflow_p flag.
        * fold-const.h (tree_binary_nonzero_warnv_p): Renamed to
        tree_binary_nonzero_p.
        (tree_binary_nonzero_p): Removed strict_overflow_p flag.
---
 gcc/fold-const.cc | 66 ++++++++++++++---------------------------------
 gcc/fold-const.h  |  3 +--
 2 files changed, 20 insertions(+), 49 deletions(-)

diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
index d97ed7e48b6..b4592016b21 100644
--- a/gcc/fold-const.cc
+++ b/gcc/fold-const.cc
@@ -10816,10 +10816,9 @@ tree_expr_nonzero_warnv_p (tree t, bool 
*strict_overflow_p)
       return tree_unary_nonzero_p (code, type, TREE_OPERAND (t, 0));
     case tcc_binary:
     case tcc_comparison:
-      return tree_binary_nonzero_warnv_p (code, type,
-                                              TREE_OPERAND (t, 0),
-                                              TREE_OPERAND (t, 1),
-                                              strict_overflow_p);
+      return tree_binary_nonzero_p (code, type,
+                                   TREE_OPERAND (t, 0),
+                                   TREE_OPERAND (t, 1));
     case tcc_constant:
     case tcc_declaration:
     case tcc_reference:
@@ -10837,10 +10836,9 @@ tree_expr_nonzero_warnv_p (tree t, bool 
*strict_overflow_p)
     case TRUTH_AND_EXPR:
     case TRUTH_OR_EXPR:
     case TRUTH_XOR_EXPR:
-      return tree_binary_nonzero_warnv_p (code, type,
-                                              TREE_OPERAND (t, 0),
-                                              TREE_OPERAND (t, 1),
-                                              strict_overflow_p);
+      return tree_binary_nonzero_p (code, type,
+                                   TREE_OPERAND (t, 0),
+                                   TREE_OPERAND (t, 1));
 
     case COND_EXPR:
     case CONSTRUCTOR:
@@ -15256,19 +15254,12 @@ tree_unary_nonzero_p (enum tree_code code, tree type, 
tree op0)
 
 /* Return true when (CODE OP0 OP1) is an address and is known to be nonzero.
    For floating point we further ensure that T is not denormal.
-   Similar logic is present in nonzero_address in rtlanal.h.
-
-   If the return value is based on the assumption that signed overflow
-   is undefined, set *STRICT_OVERFLOW_P to true; otherwise, don't
-   change *STRICT_OVERFLOW_P.  */
+   Similar logic is present in nonzero_address in rtlanal.h.  */
 
 bool
-tree_binary_nonzero_warnv_p (enum tree_code code,
-                            tree type,
-                            tree op0,
-                            tree op1, bool *strict_overflow_p)
+tree_binary_nonzero_p (enum tree_code code, tree type, tree op0, tree op1)
 {
-  bool sub_strict_overflow_p;
+  bool sub_strict_overflow_p = false;
   switch (code)
     {
     case POINTER_PLUS_EXPR:
@@ -15277,7 +15268,6 @@ tree_binary_nonzero_warnv_p (enum tree_code code,
        {
          /* With the presence of negative values it is hard
             to say something.  */
-         sub_strict_overflow_p = false;
          if (!tree_expr_nonnegative_warnv_p (op0,
                                              &sub_strict_overflow_p)
              || !tree_expr_nonnegative_warnv_p (op1,
@@ -15288,9 +15278,9 @@ tree_binary_nonzero_warnv_p (enum tree_code code,
             overflows, on a twos-complement machine the sum of two
             nonnegative numbers can never be zero.  */
          return (tree_expr_nonzero_warnv_p (op0,
-                                            strict_overflow_p)
+                                            &sub_strict_overflow_p)
                  || tree_expr_nonzero_warnv_p (op1,
-                                               strict_overflow_p));
+                                               &sub_strict_overflow_p));
        }
       break;
 
@@ -15298,26 +15288,14 @@ tree_binary_nonzero_warnv_p (enum tree_code code,
       if (TYPE_OVERFLOW_UNDEFINED (type))
        {
          if (tree_expr_nonzero_warnv_p (op0,
-                                        strict_overflow_p)
+                                        &sub_strict_overflow_p)
              && tree_expr_nonzero_warnv_p (op1,
-                                           strict_overflow_p))
-           {
-             *strict_overflow_p = true;
-             return true;
-           }
+                                           &sub_strict_overflow_p))
+           return true;
        }
       break;
 
     case MIN_EXPR:
-      sub_strict_overflow_p = false;
-      if (tree_expr_nonzero_warnv_p (op0,
-                                    &sub_strict_overflow_p)
-         && tree_expr_nonzero_warnv_p (op1,
-                                       &sub_strict_overflow_p))
-       {
-         if (sub_strict_overflow_p)
-           *strict_overflow_p = true;
-       }
       break;
 
     case MAX_EXPR:
@@ -15325,35 +15303,29 @@ tree_binary_nonzero_warnv_p (enum tree_code code,
       if (tree_expr_nonzero_warnv_p (op0,
                                     &sub_strict_overflow_p))
        {
-         if (sub_strict_overflow_p)
-           *strict_overflow_p = true;
 
          /* When both operands are nonzero, then MAX must be too.  */
          if (tree_expr_nonzero_warnv_p (op1,
-                                        strict_overflow_p))
+                                        &sub_strict_overflow_p))
            return true;
 
          /* MAX where operand 0 is positive is positive.  */
          return tree_expr_nonnegative_warnv_p (op0,
-                                              strict_overflow_p);
+                                               &sub_strict_overflow_p);
        }
       /* MAX where operand 1 is positive is positive.  */
       else if (tree_expr_nonzero_warnv_p (op1,
                                          &sub_strict_overflow_p)
               && tree_expr_nonnegative_warnv_p (op1,
                                                 &sub_strict_overflow_p))
-       {
-         if (sub_strict_overflow_p)
-           *strict_overflow_p = true;
-         return true;
-       }
+       return true;
       break;
 
     case BIT_IOR_EXPR:
       return (tree_expr_nonzero_warnv_p (op1,
-                                        strict_overflow_p)
+                                        &sub_strict_overflow_p)
              || tree_expr_nonzero_warnv_p (op0,
-                                           strict_overflow_p));
+                                           &sub_strict_overflow_p));
 
     default:
       break;
diff --git a/gcc/fold-const.h b/gcc/fold-const.h
index 0e6b3306034..7bd2e31fff0 100644
--- a/gcc/fold-const.h
+++ b/gcc/fold-const.h
@@ -163,8 +163,7 @@ extern enum tree_code invert_tree_comparison (enum 
tree_code, bool);
 extern bool inverse_conditions_p (const_tree, const_tree);
 
 extern bool tree_unary_nonzero_p (enum tree_code, tree, tree);
-extern bool tree_binary_nonzero_warnv_p (enum tree_code, tree, tree, tree op1,
-                                         bool *);
+extern bool tree_binary_nonzero_p (enum tree_code, tree, tree, tree op1);
 extern bool tree_single_nonzero_warnv_p (tree, bool *);
 extern bool tree_unary_nonnegative_warnv_p (enum tree_code, tree, tree,
                                            bool *, int);
-- 
2.43.0

Reply via email to