This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: gcc bootstrap broken on i686-linux-gnu
- From: Roger Sayle <roger at eyesopen dot com>
- To: Andreas Jaeger <aj at suse dot de>
- Cc: <gcc at gcc dot gnu dot org>
- Date: Mon, 29 Jul 2002 11:28:42 -0600 (MDT)
- Subject: Re: gcc bootstrap broken on i686-linux-gnu
On Mon, 29 Jul 2002, Andreas Jaeger wrote:
> Roger Sayle <roger@eyesopen.com> writes:
> >> /cvs/gcc/libjava/interpret.cc:3170: internal compiler error: RTL check:
> >> expected code `reg', have `subreg' in split_2, at insn-recog.c:61241
> >> Please submit a full bug report,
> >> with preprocessed source if appropriate.
> >> See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
> >>
> >> I nailed it down to this patch. Bootstrapping with that patch
> >> applied causes the ICE, without it everything seems to be fine.
> >>
> >> Roger, can you investigate, please?
> >
> > Certainly. Sorry for any inconvenience. The two possible
> > changes in behaviour are that -1.0*x is now tranformed into
> > -x by default (this previously only happened with -ffast-math),
> > and that "==" and "!=" no longer trap with default options.
> > One or both of these may be interacting badly with another
> > part of the compiler.
> >
> > I'll keep you informed as I progress. I should have a fix
> > or a work-around by the end of the day.
>
> That's fast - it gives you 6 more hours for my end of the day ;-)
> (take your time to fix it properly, I can wait another day)
>
> If you cannot reproduce it, ask me and I can try to send more details.
Hi Andreas,
By a strange coincidence, I've been trying to track down an ICE
building the powerpc tool chain on i686-pc-linux-gnu, so I last
night I tried my first ever "--enable-checking" bootstrap. This
morning I arrived at the office to find it had stopped in libjava
on exactly the problem you mentioned.
It looks like it is the -1.0*x to -x optimization that's triggering
the problem, the failure is in the split_all_insns pass that's
trying to split the following instruction:
(insn:HI 4951 4950 4957 212 0x4057a8c0 (parallel [
(set (subreg:DF (reg/v:DI 1199) 0)
(neg:DF (reg/v:DF 1193)))
(clobber (reg:CC 17 flags))
]) 372 {*negdf2_if} (insn_list 4941 (nil))
(expr_list:REG_DEAD (reg/v:DF 1193)
(expr_list:REG_UNUSED (reg:CC 17 flags)
(nil))))
I'm currently trying to work out whether (1) its the code that generated
the (subreg:DF (reg:DI x) 0) that's at fault, (2) whether there's an
incorrect constraint in the i386.md patterns, or (3) its an issue with
genrecog generating an incorrect split_insns implementation.
Anyone? anyone?
Roger
--