This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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
--


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]