https://gcc.gnu.org/g:c0c5db68331ea8814db45ecd90ba842818e623fa

commit r12-10908-gc0c5db68331ea8814db45ecd90ba842818e623fa
Author: Richard Biener <rguent...@suse.de>
Date:   Mon Oct 14 08:11:22 2024 +0200

    middle-end/116891 - fix (negate (IFN_FNMS@3 @0 @1 @2)) -> (IFN_FMA @0 @1 @2)
    
    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)

Diff:
---
 gcc/match.pd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/match.pd b/gcc/match.pd
index 45ed34205106..d32338c27801 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -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.  */

Reply via email to