public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-4131] [PR tree-optimization/107732] [range-ops] Handle attempt to abs() negatives.
@ 2022-11-17 17:43 Aldy Hernandez
  0 siblings, 0 replies; only message in thread
From: Aldy Hernandez @ 2022-11-17 17:43 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:4e306222f442f8d4c6fc6da997ab756a5e43e36e

commit r13-4131-g4e306222f442f8d4c6fc6da997ab756a5e43e36e
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Thu Nov 17 16:47:17 2022 +0100

    [PR tree-optimization/107732] [range-ops] Handle attempt to abs() negatives.
    
    The threader is creating a scenario where we are trying to solve:
    
            [NEGATIVES] = abs(x)
    
    While solving this we have an intermediate value of UNDEFINED because
    we have no positive numbers.  But then we try to union the negative
    pair to the final result by querying the bounds.  Since neither
    UNDEFINED nor NAN have bounds, they need to be specially handled.
    
            PR tree-optimization/107732
    
    gcc/ChangeLog:
    
            * range-op-float.cc (foperator_abs::op1_range): Early exit when
            result is undefined.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.dg/tree-ssa/pr107732.c: New test.

Diff:
---
 gcc/range-op-float.cc                    |  2 +-
 gcc/testsuite/gcc.dg/tree-ssa/pr107732.c | 13 +++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc
index adb0cbaa6d5..ee88511eba0 100644
--- a/gcc/range-op-float.cc
+++ b/gcc/range-op-float.cc
@@ -1407,7 +1407,7 @@ foperator_abs::op1_range (frange &r, tree type,
       neg_nan.set_nan (type, true);
       r.union_ (neg_nan);
     }
-  if (r.known_isnan ())
+  if (r.known_isnan () || r.undefined_p ())
     return true;
   // Then add the negative of each pair:
   // ABS(op1) = [5,20] would yield op1 => [-20,-5][5,20].
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr107732.c b/gcc/testsuite/gcc.dg/tree-ssa/pr107732.c
new file mode 100644
index 00000000000..b216f38db0e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr107732.c
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-O2" }
+
+double sqrt(double);
+double a, b, c;
+void d() {
+  for (;;) {
+    c = __builtin_fabs(a);
+    sqrt(c);
+    if (a)
+      a = b;
+  }
+}

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

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

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-17 17:43 [gcc r13-4131] [PR tree-optimization/107732] [range-ops] Handle attempt to abs() negatives 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).