]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix (fcopysign x, NEGATIVE_CONST) -> (fneg (fabs x)) simplification [PR112483]
authorXi Ruoyao <xry111@xry111.site>
Sun, 12 Nov 2023 14:16:20 +0000 (14:16 +0000)
committerXi Ruoyao <xry111@xry111.site>
Mon, 13 Nov 2023 07:51:14 +0000 (15:51 +0800)
(fcopysign x, NEGATIVE_CONST) can be simplified to (fneg (fabs x)), but
a logic error in the code caused it mistakenly simplified to (fneg x)
instead.

gcc/ChangeLog:

PR rtl-optimization/112483
* simplify-rtx.cc (simplify_binary_operation_1) <case COPYSIGN>:
Fix the simplification of (fcopysign x, NEGATIVE_CONST).

gcc/simplify-rtx.cc

index 69d87579d9c88d31bedd53d732af56d14c0ca3bc..2d2e5a3c1ca67e279239e15aff0f1fb954e01f40 100644 (file)
@@ -4392,7 +4392,7 @@ simplify_ashift:
          real_convert (&f1, mode, CONST_DOUBLE_REAL_VALUE (trueop1));
          rtx tmp = simplify_gen_unary (ABS, mode, op0, mode);
          if (REAL_VALUE_NEGATIVE (f1))
-           tmp = simplify_gen_unary (NEG, mode, op0, mode);
+           tmp = simplify_gen_unary (NEG, mode, tmp, mode);
          return tmp;
        }
       if (GET_CODE (op0) == NEG || GET_CODE (op0) == ABS)