]> 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)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 23 Oct 2024 07:23:26 +0000 (09:23 +0200)
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 62edaf1267e3fb883543eb23a1c345730a0a36ac..449a56c43b364e00d2c6ca65c2d0e4a6dda38622 100644 (file)
@@ -8710,7 +8710,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.  */