[Bug target/64160] msp430 code generation error adding 32-bit integers

pab at pabigot dot com gcc-bugzilla@gcc.gnu.org
Wed Dec 10 11:19:00 GMT 2014


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

--- Comment #5 from Peter A. Bigot <pab at pabigot dot com> ---
Thanks, Ulrich: that's a better explanation of what makes me uncomfortable with
that part of the machine description.

We have a complex split pattern that's the sole user of an idiosyncratic
predicate.  It supports a set of other patterns that are introduced with a
comment starting with "we are playing a dangerous game with GCC here" and going
on to suggest "we put in some hacks to fix the situations we found where it
didn't work".  It only works on SI, not QI (and yes people do use 64-bit
integer operations on this target).  It's only done for add, not subtract. 
It's not clear why subregs are to be excluded from the overall concept of
eliminating partial results.

Basically, the whole set of patterns exposing carry looks like an attempt to
optimize what's produced by a specific source-level expression, instead of a
carefully constructed transformation designed to match the capabilities of the
target ISA.

As MSP430 user I'd rather see it pulled and replaced with something simple that
works even if it isn't optimal: in mspgcc I just generated an ADD (SUB)
followed by a sequence of ADDC (SUBC) determined by operand size and that
worked out fine.  Fixing the inefficiencies described in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64027 would provide more value
than special-casing 32-bit add operations.



More information about the Gcc-bugs mailing list