]> git.ipfire.org Git - thirdparty/gcc.git/commit
middle-end: don't form FMAs when multiplication is not single use. [PR108583]
authorTamar Christina <tamar.christina@arm.com>
Sun, 12 Mar 2023 18:40:50 +0000 (18:40 +0000)
committerTamar Christina <tamar.christina@arm.com>
Sun, 12 Mar 2023 18:40:50 +0000 (18:40 +0000)
commit0b3c630fcc44063a61f6131af48a4171b1de2b37
treeb3033ac2f983291900c22964bfc11f10d12635ac
parent03c6ba86757f0684c5419c90651106900f5ecb5a
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.sandiford@arm.com>
gcc/testsuite/gcc.dg/mla_1.c [new file with mode: 0644]
gcc/tree-ssa-math-opts.cc