On Sun, Nov 12, 2023 at 9:27 PM Xi Ruoyao <xry...@xry111.site> wrote: > > (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.
OK. > gcc/ChangeLog: > > PR rtl-optimization/112483 > * simplify-rtx.cc (simplify_binary_operation_1) <case COPYSIGN>: > Fix the simplification of (fcopysign x, NEGATIVE_CONST). > --- > > Bootstrapped and regtested on loongarch64-linux-gnu and > x86_64-linux-gnu. Ok for trunk? > > gcc/simplify-rtx.cc | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc > index 69d87579d9c..2d2e5a3c1ca 100644 > --- a/gcc/simplify-rtx.cc > +++ b/gcc/simplify-rtx.cc > @@ -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) > -- > 2.42.1 >