https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95060

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:c0c39a765b0714aed36fced6fbba452a6619acb0

commit r11-350-gc0c39a765b0714aed36fced6fbba452a6619acb0
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed May 13 11:21:02 2020 +0200

    Fold single imm use of a FMA if it is a negation [PR95060]

    match.pd already has simplifications for negation of a FMA (FMS, FNMA,
FNMS)
    call if it is single use, but when the widening_mul pass discovers FMAs,
    nothing folds the statements anymore.

    So, the following patch adjusts the widening_mul pass to handle that.

    I had to adjust quite a lot of tests, because they have in them nested FMAs
    (one FMA feeding another one) and the patch results in some (equivalent)
changes
    in the chosen instructions, previously the negation of one FMA's result
    would result in the dependent FMA being adjusted for the negation, but now
    instead the first FMA is adjusted.

    2020-05-13  Jakub Jelinek  <ja...@redhat.com>

            PR tree-optimization/95060
            * tree-ssa-math-opts.c (convert_mult_to_fma_1): Fold a NEGATE_EXPR
            if it is the single use of the FMA internal builtin.

            * gcc.target/i386/avx512f-pr95060.c: New test.
            * gcc.target/i386/fma_double_1.c: Adjust expected insn counts.
            * gcc.target/i386/fma_double_2.c: Likewise.
            * gcc.target/i386/fma_double_3.c: Likewise.
            * gcc.target/i386/fma_double_4.c: Likewise.
            * gcc.target/i386/fma_double_5.c: Likewise.
            * gcc.target/i386/fma_double_6.c: Likewise.
            * gcc.target/i386/fma_float_1.c: Likewise.
            * gcc.target/i386/fma_float_2.c: Likewise.
            * gcc.target/i386/fma_float_3.c: Likewise.
            * gcc.target/i386/fma_float_4.c: Likewise.
            * gcc.target/i386/fma_float_5.c: Likewise.
            * gcc.target/i386/fma_float_6.c: Likewise.
            * gcc.target/i386/l_fma_double_1.c: Likewise.
            * gcc.target/i386/l_fma_double_2.c: Likewise.
            * gcc.target/i386/l_fma_double_3.c: Likewise.
            * gcc.target/i386/l_fma_double_4.c: Likewise.
            * gcc.target/i386/l_fma_double_5.c: Likewise.
            * gcc.target/i386/l_fma_double_6.c: Likewise.
            * gcc.target/i386/l_fma_float_1.c: Likewise.
            * gcc.target/i386/l_fma_float_2.c: Likewise.
            * gcc.target/i386/l_fma_float_3.c: Likewise.
            * gcc.target/i386/l_fma_float_4.c: Likewise.
            * gcc.target/i386/l_fma_float_5.c: Likewise.
            * gcc.target/i386/l_fma_float_6.c: Likewise.

Reply via email to