Your change breaks MIPS.
Jan Hubicka
jh@suse.cz
Thu Jan 3 12:06:00 GMT 2002
> On Thu, Jan 03, 2002 at 08:49:46AM -0800, H . J . Lu wrote:
> > On Thu, Jan 03, 2002 at 02:47:14PM +0100, Jan Hubicka wrote:
> > > > On Sun, Dec 30, 2001 at 12:44:31AM +0100, Jan Hubicka wrote:
> > > > > > > BTW, am I the only one seeing bootstrap failure on mips?
> > > > > > > Thanks.
> > > > > > > H.J.
> > > > > >
> > > > > > No, I see it also on irix6.2.
> > > > > I got it now too. I hoped the problem to be cc0 issue related to jump threading,
> > > > > but jump threading code appears to handle cc0 conservatively - in fact disable wast
> > > > > majority of threading - I need to fix that separately.
> > > > >
> > > > > Does someone have simplified testcase or can reproduce similar breakage on other target?
> > > > >
> > > >
> > > > I am testing this patch on mips now. I don't know it will solve the
> > > > mips bootstrap problem. But Jan, I blieve you really meant
> > > >
> > > > cleanup_cfg ((optimize ? CLEANUP_EXPENSIVE : 0)
> > > > | (flag_thread_jumps ? CLEANUP_THREADING : 0));
> > > Yes, I did. Thanks for catching that!
> > > if I read that properly, without the parenthesis and optimize set it should
> > > not do any threading, but it definitly does - I need to check.
> > ...
> > > Uhm... I was catching this over an hour today... Silly me! and thanks
> > > a lot for investigation!
> > >
> > > I will re-start my MIPS bootstrap now!
> >
> > It didn't work for me on mips. I am looking into it now.
> >
>
> The stage1 compiler miscompiled parse_number in cppexp.c. It turns
>
> for(; p < end; p++)
> {
> c = *p;
>
> if (ISDIGIT (c)
> || (base == 16 && ISXDIGIT (c)))
> digit = hex_value (c);
> else
> break;
>
> if (largest_digit < digit)
> largest_digit = digit;
> nd = n * base + digit;
> overflow |= MAX_over_base < n || nd < n;
> n = nd;
> }
>
> if (p < end)
> {
> /* Check for a floating point constant. Note that float constants
>
> into
>
> for(; p < end; p++)
> {
> c = *p;
>
> if (ISDIGIT (c)
> || (base == 16 && ISXDIGIT (c)))
> digit = hex_value (c);
> else
> break;
>
> if (largest_digit < digit)
> largest_digit = digit;
> nd = n * base + digit;
> overflow |= MAX_over_base < n || nd < n;
> n = nd;
> }
>
> {
> /* Check for a floating point constant. Note that float constants
I've got to same testcase. I can't continue today but I will definitly check tomorrow tonight...
Hnoza
>
>
>
> H.J.
More information about the Gcc-patches
mailing list