[Bug target/43902] New: suboptimal MIPS widening multiply accumulate

wilson at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Mon Apr 26 20:08:00 GMT 2010


This testcase
int array1[100], array2[100];

long long
sub (int max)
{
  int k;
  long long total = 0;

  for (k = 0; k < max; k++) 
    total += (long long)array1[k] * (long long)array2[k];

  return total;
}

Generates a macc instruction with gcc-3.4.5 when compiled with -O2
-march=sr71000 -mabi=32 -mgp32.  This does not generate a macc instruction with
gcc-4.0.0.  The difference is that the 32-bit adddi3 pattern was deleted in
between gcc-3.4.5 and gcc-4.0.0.  So gcc-3.4.5 generates a 2 insn rtl sequence
which is trivial to combine into a multiply-add insn.  But gcc-4.0.0 generates
a 5 insn rtl sequence which will not be combined.

I noticed this on mainline because I should be able to generate widening
multiply-accumulate instructions (madd) with a mipsisa32r2 target with the same
testcase, but I can't.


-- 
           Summary: suboptimal MIPS widening multiply accumulate
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: wilson at gcc dot gnu dot org
GCC target triplet: mips*-*-*


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43902



More information about the Gcc-bugs mailing list