From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 757E43856DE4; Fri, 29 Apr 2022 12:21:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 757E43856DE4 From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/105414] constant folding for fmin/max(snan, snan) is wrong Date: Fri, 29 Apr 2022 12:21:12 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Version: 12.0 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: rguenth at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: guihaoc at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Apr 2022 12:21:12 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D105414 --- Comment #10 from Richard Biener --- (In reply to Jakub Jelinek from comment #9) > (In reply to HaoChen Gui from comment #8) > > (In reply to Jakub Jelinek from comment #7) > > > Sure, but you don't want to do that at least if flag_trapping_math. > > > Otherwise, the predicate would be tree_expr_signaling_nan_p and real_= nan > > > function with "", 1 as the middle 2 arguments can create it. But not= e that > > > nothing in match.pd does that right now, so I don't think we should d= o it in > > > this case either. > >=20 > > If either of arguments is sNaN, fmin/max should return a qNaN. So I rea= lly > > want to create a pattern in match.pd to do this. It needs to create a q= NaN >=20 > A sNaN should primarily raise an exception or raise a signal when used. > So better not to fold it. > Given that we don't fold anything else with sNaN, starting from sNaN + > whatever > etc., just folding it for something so rare as fmin/fmax would be weird. Agreed btw. Iff then such propagation / simplification should belong in a pass like forwprop or value-numbering which can do this in a cheaper way than adding patterns for all kinds of operations with NaNs. One might also say that we should diagnose any arithmetic with known NaNs ...=