]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
middle-end/116891 - fix (negate (IFN_FNMS@3 @0 @1 @2)) -> (IFN_FMA @0 @1 @2)
authorRichard Biener <rguenther@suse.de>
Mon, 14 Oct 2024 06:11:22 +0000 (08:11 +0200)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 17 Jan 2025 08:52:53 +0000 (09:52 +0100)
Transforming -fma (-a, b, -c) to fma (a, b, c) is only valid when
not rounding towards -inf or +inf as the sign of the multiplication
changes.

PR middle-end/116891
* match.pd ((negate (IFN_FNMS@3 @0 @1 @2)) -> (IFN_FMA @0 @1 @2)):
Only enable for !HONOR_SIGN_DEPENDENT_ROUNDING.

(cherry picked from commit c53bd48c6920bc1f4039b6682aafbf414a600e47)

gcc/match.pd

index 45ed34205106b0a171de0f90a3376bed55d4b4a5..d32338c27801444de3d69792d2946071aa49d0d6 100644 (file)
@@ -7083,7 +7083,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
   (IFN_FMA @0 @1 @2))
  (simplify
   (negate (IFN_FNMS@3 @0 @1 @2))
-  (if (single_use (@3))
+  (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3))
    (IFN_FMA @0 @1 @2))))
 
 /* CLZ simplifications.  */