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