https://gcc.gnu.org/g:d428b0147e257e573f224d9230cd87d8ef89e934

commit r17-3027-gd428b0147e257e573f224d9230cd87d8ef89e934
Author: Aldy Hernandez <[email protected]>
Date:   Wed Aug 5 09:00:49 2026 +0000

    Use !contains_zero_p for known nonzero tests instead of nonzero_p.
    
    These callers ask whether a range excludes zero, which nonzero_p ()
    only approximated (i.e. it is false for e.g. [1, 5]).
    
    Tested on ppc64le Linux.
    
    gcc/ChangeLog:
    
            * gimple-range-path.cc (path_range_query::adjust_for_non_null_uses):
            Use !contains_zero_p instead of nonzero_p.
            * tree-ssa-structalias.cc (find_what_p_points_to): Likewise.
            * tree-ssanames.cc (set_range_info): Likewise.
            * tree-vrp.cc (execute_ranger_vrp): Likewise.
    
    gcc/analyzer/ChangeLog:
    
            * region-model.cc (region_model::eval_condition): Likewise.

Diff:
---
 gcc/analyzer/region-model.cc | 2 +-
 gcc/gimple-range-path.cc     | 2 +-
 gcc/tree-ssa-structalias.cc  | 2 +-
 gcc/tree-ssanames.cc         | 2 +-
 gcc/tree-vrp.cc              | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index 8addf1d9a070..f385e008fa76 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -5161,7 +5161,7 @@ region_model::eval_condition (const svalue *lhs,
                  {
                    if (out.zero_p ())
                      return tristate::TS_FALSE;
-                   if (out.nonzero_p ())
+                   if (!out.contains_zero_p ())
                      return tristate::TS_TRUE;
                  }
              }
diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc
index a8d137741f1a..8a89da3dda37 100644
--- a/gcc/gimple-range-path.cc
+++ b/gcc/gimple-range-path.cc
@@ -460,7 +460,7 @@ path_range_query::adjust_for_non_null_uses (basic_block bb)
 
       if (get_cache (r, name))
        {
-         if (r.nonzero_p ())
+         if (!r.contains_zero_p ())
            continue;
        }
       else
diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc
index 30f911e2c727..76fb3600e748 100644
--- a/gcc/tree-ssa-structalias.cc
+++ b/gcc/tree-ssa-structalias.cc
@@ -934,7 +934,7 @@ find_what_p_points_to (tree fndecl, tree p)
   varinfo_t vi;
   prange vr;
   get_range_query (DECL_STRUCT_FUNCTION (fndecl))->range_of_expr (vr, p);
-  bool nonnull = vr.nonzero_p ();
+  bool nonnull = !vr.contains_zero_p ();
 
   /* For parameters, get at the points-to set for the actual parm
      decl.  */
diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc
index d2ebb49909f0..9ad860df65a1 100644
--- a/gcc/tree-ssanames.cc
+++ b/gcc/tree-ssanames.cc
@@ -429,7 +429,7 @@ set_range_info (tree name, const vrange &r)
     {
       struct ptr_info_def *pi = get_ptr_info (name);
       // If R is nonnull and pi is not, set nonnull.
-      if (r.nonzero_p () && (!pi || pi->pt.null))
+      if (!r.contains_zero_p () && (!pi || pi->pt.null))
        set_ptr_nonnull (name);
       else
        return false;
diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc
index 49eeedb82669..da65d67b4052 100644
--- a/gcc/tree-vrp.cc
+++ b/gcc/tree-vrp.cc
@@ -1139,7 +1139,7 @@ execute_ranger_vrp (struct function *fun, bool final_p)
        {
          ipa_record_return_value_range (return_range);
          if (POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))
-             && return_range.nonzero_p ()
+             && !return_range.contains_zero_p ()
              && cgraph_node::get (current_function_decl)
                        ->add_detected_attribute ("returns_nonnull"))
            warn_function_returns_nonnull (current_function_decl);

Reply via email to