public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-4125] [PR68097] Try to avoid recursing for floats in gimple_stmt_nonnegative_warnv_p.
@ 2022-11-17  8:53 Aldy Hernandez
  0 siblings, 0 replies; only message in thread
From: Aldy Hernandez @ 2022-11-17  8:53 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:822a0823c012b912f0108a4da257cd97cbcdb7a3

commit r13-4125-g822a0823c012b912f0108a4da257cd97cbcdb7a3
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Sat Nov 12 11:58:07 2022 +0100

    [PR68097] Try to avoid recursing for floats in gimple_stmt_nonnegative_warnv_p.
    
    It irks me that a PR named "we should track ranges for floating-point
    hasn't been closed in this release.  This is an attempt to do just
    that.
    
    As mentioned in the PR, even though we track ranges for floats, it has
    been suggested that avoiding recursing through SSA defs in
    gimple_assign_nonnegative_warnv_p is also a goal.  This patch uses a
    global range query (no on-demand lookups, just global ranges and
    minimal folding) to determine if the range of a statement is known to
    be non-negative.
    
            PR tree-optimization/68097
    
    gcc/ChangeLog:
    
            * gimple-fold.cc (gimple_stmt_nonnegative_warnv_p): Call
            range_of_stmt for floats.

Diff:
---
 gcc/gimple-fold.cc | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
index f8a1875ea3e..c2d9c806aee 100644
--- a/gcc/gimple-fold.cc
+++ b/gcc/gimple-fold.cc
@@ -68,6 +68,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-ssa-strlen.h"
 #include "varasm.h"
 #include "internal-fn.h"
+#include "gimple-range.h"
 
 enum strlen_range_kind {
   /* Compute the exact constant string length.  */
@@ -9234,6 +9235,15 @@ bool
 gimple_stmt_nonnegative_warnv_p (gimple *stmt, bool *strict_overflow_p,
 				 int depth)
 {
+  tree type = gimple_range_type (stmt);
+  if (type && frange::supports_p (type))
+    {
+      frange r;
+      bool sign;
+      if (get_global_range_query ()->range_of_stmt (r, stmt)
+	  && r.signbit_p (sign))
+	return !sign;
+    }
   switch (gimple_code (stmt))
     {
     case GIMPLE_ASSIGN:

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-17  8:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-17  8:53 [gcc r13-4125] [PR68097] Try to avoid recursing for floats in gimple_stmt_nonnegative_warnv_p Aldy Hernandez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).