ICE in g77 from egcs-19981109
Jeffrey A Law
law@cygnus.com
Thu Nov 19 19:24:00 GMT 1998
In message < rzqn25pe2c0.fsf@djlvig.dl.ac.uk >you write:
> >>>>> "MK" == Martin Kahlert <martin.kahlert@mchp.siemens.de> writes:
>
> MK> C g77 -c -O -fomit-frame-pointer ssptrd.f
> MK> C ssptrd.f: In subroutine `ssptrd':
> MK> C ssptrd.f:13: internal error--insn does not satisfy its constrain
> ts:
> MK> C (insn 31 81 32 (set (reg:SF 8 %st(0))
> MK> C (mult:SF (reg:SF 8 %st(0))
> MK> C (const_double:SF (mem/u:SF (symbol_ref/u:SI ("*.LC0")) 0) 0
> 0 1073643520)))
> MK> C 350 {strlensi-3} (nil)
> MK> C (nil))
> MK> C /usr/src/egcs-19981109/gcc/toplev.c:1390: Internal compiler err
> or in \
> MK> C function fatal_insn
>
> MK> C (This is for i686-pc-linux-gnulibc1 native)
>
> This is still failing with y'day's source. I've added it as
> testsuite/g77.f-torture/compile/981117-1.f.
I took a look at a similar problem while traveling back to SLC a couple weeks
ago. I got lost in reload (suprise) and haven't had the change to look at it
since.
I believe the root of the problem is reload's desire to substitute in an
equivalent constant for a pseudo reg -- without ever verifying that the
substitution is legal.
This can be worked around by defining LEGITIMATE_CONSTANT_P to reject any
floating point constant that is not a standard 387 constant. That is likely
to also give better code. So it's probably a good thing to do anyway, but I
wanted to take another look at reload to make sure I really understood the
underlying problem.
jeff
More information about the Gcc-bugs
mailing list