public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/105414] New: constant folding for fmin/max(snan, snan) is wrong
@ 2022-04-28  1:25 guihaoc at gcc dot gnu.org
  2022-04-28  1:28 ` [Bug tree-optimization/105414] " pinskia at gcc dot gnu.org
                   ` (13 more replies)
  0 siblings, 14 replies; 15+ messages in thread
From: guihaoc at gcc dot gnu.org @ 2022-04-28  1:25 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105414

            Bug ID: 105414
           Summary: constant folding for fmin/max(snan, snan) is wrong
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: guihaoc at gcc dot gnu.org
  Target Milestone: ---

gcc -O0 -fsignaling-nans -D_WANT_SNAN -lm -o fmin fmin.c && ./fmin
(snan, snan), fmin: nan
gcc -O3 -fsignaling-nans -D_WANT_SNAN -lm -o fmin fmin.c && ./fmin
(snan, snan), fmin: snan

The fmin(SNaN, SNaN) got different result with O0 and O3. The result should be
nan(QNaN) according to C standard. 

The problem might be at match.pd. fmin(a,a) can't be folded to a when a is
SNaN. I propose following patch to fix it.

diff --git a/gcc/match.pd b/gcc/match.pd
index cad61848daa..2c2efda158b 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -3093,7 +3093,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
 (for minmax (min max FMIN_ALL FMAX_ALL)
  (simplify
   (minmax @0 @0)
-  @0))
+  (if(!HONOR_SNANS (@0) || !TREE_REAL_CST (@0).signalling)
+  @0)))
 /* min(max(x,y),y) -> y.  */
 (simplify
  (min:c (max:c @0 @1) @1)

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2022-11-07  4:48 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-28  1:25 [Bug tree-optimization/105414] New: constant folding for fmin/max(snan, snan) is wrong guihaoc at gcc dot gnu.org
2022-04-28  1:28 ` [Bug tree-optimization/105414] " pinskia at gcc dot gnu.org
2022-04-28  1:31 ` guihaoc at gcc dot gnu.org
2022-04-28  3:07 ` guihaoc at gcc dot gnu.org
2022-04-28  7:07 ` rguenth at gcc dot gnu.org
2022-04-28  7:51 ` jakub at gcc dot gnu.org
2022-04-28  8:10 ` guihaoc at gcc dot gnu.org
2022-04-28  8:18 ` jakub at gcc dot gnu.org
2022-04-29 10:02 ` guihaoc at gcc dot gnu.org
2022-04-29 10:06 ` jakub at gcc dot gnu.org
2022-04-29 12:21 ` rguenth at gcc dot gnu.org
2022-05-11  1:32 ` cvs-commit at gcc dot gnu.org
2022-05-12  2:54 ` guihaoc at gcc dot gnu.org
2022-09-28 10:05 ` cvs-commit at gcc dot gnu.org
2022-11-07  4:48 ` pinskia at gcc dot gnu.org

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).