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

--- Comment #28 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tamar Christina <tnfch...@gcc.gnu.org>:

https://gcc.gnu.org/g:0b3c630fcc44063a61f6131af48a4171b1de2b37

commit r13-6618-g0b3c630fcc44063a61f6131af48a4171b1de2b37
Author: Tamar Christina <tamar.christ...@arm.com>
Date:   Sun Mar 12 18:40:50 2023 +0000

    middle-end: don't form FMAs when multiplication is not single use.
[PR108583]

    The testcase

    typedef unsigned int vec __attribute__((vector_size(32)));
    vec
    f3 (vec a, vec b, vec c)
    {
      vec d = a * b;
      return d + ((c + d) >> 1);
    }

    shows a case where we don't want to form an FMA due to the MUL not being
single
    use.  In this case to form an FMA we have to redo the MUL as well as we no
    longer have it to share.

    As such making an FMA here would be a de-optimization.

    gcc/ChangeLog:

            PR target/108583
            * tree-ssa-math-opts.cc (convert_mult_to_fma): Inhibit FMA in case
not
            single use.

    gcc/testsuite/ChangeLog:

            PR target/108583
            * gcc.dg/mla_1.c: New test.

    Co-Authored-By: Richard Sandiford <richard.sandif...@arm.com>

Reply via email to