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: Your change breaks MIPS.


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


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