This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: egcs is broken on ppro.
- To: hjl at lucon dot org (H.J. Lu)
- Subject: Re: egcs is broken on ppro.
- From: "John S. Dyson" <toor at dyson dot iquest dot net>
- Date: Sun, 26 Oct 1997 23:42:35 -0500 (EST)
- Cc: egcs at cygnus dot com
H.J. Lu said:
> It turns out egcs is broken on Intel Pentim Pro. In additon to the
> small test case I sent earlier, I even got the same compiler error
> when I built egcs. See below.
>
> I think the problem is the spill register %eax is used long before
> reload when the arch has conditional move. For whatever reason,
> egcs reuse %eax as the spill register.
>
>
> --
> H.J. Lu (hjl@gnu.ai.mit.edu)
> ---
> gcc -c -DIN_GCC -DUSE_GNULIBC_1 -mcpu=pentiumpro -march=pentiumpro -funroll-loops -O2 -g -pipe -fno-exceptions -DHAVE_CONFIG_H -I. -I/home/work/gnu/src/egcs/gcc -I/home/work/gnu/src/egcs/gcc/config /home/work/gnu/src/egcs/gcc/expr.c
> /home/work/gnu/src/egcs/gcc/expr.c: In function `expand_assignment':
> /home/work/gnu/src/egcs/gcc/expr.c:3081: internal error--insn does not satisfy its constraints:
> (insn/s 1055 1054 341 (parallel[
> (set (reg/v:SI 1 %edx)
> (if_then_else:SI (ne (cc0)
> (const_int 0))
> (reg:SI 0 %eax)
> (const_int 1)))
> (clobber (reg:SI 0 %eax))
> ] ) 374 {movsicc_1} (insn_list 329 (insn_list 331 (nil)))
> (expr_list:REG_DEAD (reg:SI 0 %eax)
> (expr_list:REG_UNUSED (reg:SI 0 %eax)
> (nil))))
> gcc: Internal compiler error: program cc1 got fatal signal 6
> cpp: output pipe has been closed
>
Even though I know that it is likely not a correct fix (but I wanted to make
it (egcs-latest)) work for me -- I added force_reg operations to the
appropriate define_expands (e.g. cmpsi.) Problem went away -- but I really
don't feel like that my change is anything but a work-around.
(Sorry for not reporting it -- but I like to be a lurker on the list, because of
being overloaded on my work at NCI/Oracle and FreeBSD :-)).
John
dyson@freebsd.org
jdyson@nc.com