https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112483
Thomas Schwinge <tschwinge at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target|loongarch64-linux-gnu |loongarch64-linux-gnu
| |powerpc64le-linux-gnu
CC| |tschwinge at gcc dot gnu.org
--- Comment #6 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
(In reply to Xi Ruoyao from comment #5)
> In simplify_binary_operation_1, simplify-rtx.cc:
>
> case COPYSIGN:
> if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0))
> return op0;
> if (CONST_DOUBLE_AS_FLOAT_P (trueop1))
> {
> REAL_VALUE_TYPE f1;
> 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);
> ^^^
> return tmp;
> }
>
> shouldn't the "op0" with caret be "tmp" instead??
I have no knowledge at all about that code, but your suggested change appears
legit, and I do confirm that it does fix the following powerpc64le-linux-gnu
regressions:
@@ -169421,7 +169467,7 @@ PASS: gcc.target/powerpc/p8vector-fp.c
scan-assembler xsdivdp
PASS: gcc.target/powerpc/p8vector-fp.c scan-assembler xsdivsp
PASS: gcc.target/powerpc/p8vector-fp.c scan-assembler xsmuldp
PASS: gcc.target/powerpc/p8vector-fp.c scan-assembler xsmulsp
[-PASS:-]{+FAIL:+} gcc.target/powerpc/p8vector-fp.c scan-assembler xsnabsdp
PASS: gcc.target/powerpc/p8vector-fp.c scan-assembler xsnegdp
PASS: gcc.target/powerpc/p8vector-fp.c scan-assembler xssqrtdp
PASS: gcc.target/powerpc/p8vector-fp.c scan-assembler xssqrtsp
PASS: gfortran.dg/ieee/ieee_2.f90 -O0 (test for excess errors)
PASS: gfortran.dg/ieee/ieee_2.f90 -O0 execution test
PASS: gfortran.dg/ieee/ieee_2.f90 -O1 (test for excess errors)
[-PASS:-]{+FAIL:+} gfortran.dg/ieee/ieee_2.f90 -O1 execution test
PASS: gfortran.dg/ieee/ieee_2.f90 -O2 (test for excess errors)
PASS: gfortran.dg/ieee/ieee_2.f90 -O2 execution test
PASS: gfortran.dg/ieee/ieee_2.f90 -O3 -fomit-frame-pointer -funroll-loops
-fpeel-loops -ftracer -finline-functions (test for excess errors)
@@ -63715,7 +63751,7 @@ PASS: gfortran.dg/ieee/ieee_2.f90 -O3
-fomit-frame-pointer -funroll-loops -fpe
PASS: gfortran.dg/ieee/ieee_2.f90 -O3 -g (test for excess errors)
PASS: gfortran.dg/ieee/ieee_2.f90 -O3 -g execution test
PASS: gfortran.dg/ieee/ieee_2.f90 -Os (test for excess errors)
[-PASS:-]{+FAIL:+} gfortran.dg/ieee/ieee_2.f90 -Os execution test