On Wed, 2009-10-07 at 16:42 +0200, Richard Guenther wrote:
> On Wed, Oct 7, 2009 at 4:37 PM, Tobias Grosser
> <[email protected]> wrote:
> > I try to analyse this code:
> > ------------------------------------------------------
> > int foo (int N)
> > {
> > int ftab[257];
> > int i, j;
> >
> > for (i = 0; i < N - 7488645; i++)
> > j = ftab [i];
> >
> > return j;
> > }
> > ------------------------------------------------------
> >
> > The number of iterations I get is:
> >
> > (unsigned int) N_5(D) + 0x0ffffffff
> >
> > However I expect it to be
> >
> > (unsigned int) N_5(D) + (-1)
>
> No, that would be (unsigned int) (N_5(D) + -1) instead.
>
> It's fold that canonicalizes this to the above form - you
> simply have to deal with it (unsigned arithmetic, that is).
OK. So I need to understand this better.
E.g:
int foo (int N)
{
int ftab[257];
int i, j;
for (i = 0; i < N - 50; i++)
j = ftab [i];
return j;
}
Number of latch executions: (unsigned int) N_5(D) + 0x0ffffffcd
What happens if N == 5? I would expect the number of latch iterations to
be 0 as i < 5 - 50 is always false. However using the upper expression I
get something like
5 + 0x0ffffffcd == 0x0ffffffd2
what is a lot bigger than 0.
Thanks for your help
Tobi