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

Reply via email to