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