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>