[PATCH, i386]: Macroize add and sub patterns

Jakub Jelinek jakub@redhat.com
Wed Oct 7 12:23:00 GMT 2009


On Tue, Oct 06, 2009 at 03:53:16PM +0200, Uros Bizjak wrote:
> Hello!
> 
> As the $subject says.  Macroized in such a way that no functional
> change was introduced (although it was tempting :] ). The patch
> removes ~500 lines, otherwise it mostly moves code around.

Unfortunately this broke bootstrap on x86_64-linux.

../../gcc/gnat1 -gnatwa -quiet -dumpbase a-strunb.adb -auxbase-strip a-strunb.o -O2 -W -Wall -fPIC -g -gnatpg -m32 -mtune=generic -gnatO a-strunb.o a-strunb.adb -o /tmp/ccSzLhJO.s
+===========================GNAT BUG DETECTED==============================+
| 4.5.0 20091007 (experimental) (x86_64-unknown-linux-gnu) GCC error:      |
| in decompose_multiword_subregs, at lower-subreg.c:1262                   |
| Error detected around a-strunb.adb:360:8                                 |
| Please submit a bug report; see http://gcc.gnu.org/bugs.html.            |
| Use a subject line meaningful to you and us to track the bug.            |
| Include the entire contents of this bug box in the report.               |
| Include the exact gcc or gnatmake command that you entered.              |
| Also include sources listed below in gnatchop format                     |
| (concatenated together with no headers between files).                   |
+==========================================================================+

...

(insn 8 7 9 2 a-strunb.adb:357 (set (reg:SI 99 [ D.8603 ])
        (plus:SI (reg:SI 80)
            (const_int 8 [0x8]))) -1 (nil))

is now considered insn_invalid_p.  I think the bug is that while before
lea_1 (etc.) were defined before addsi_1 (etc.), it is now defined after it.
This means in this insn addsi_1 is matched instead of lea_1 in recog, with
num_clobbers 1, clobbering a hard register.

	Jakub



More information about the Gcc-patches mailing list