On Wed, 2009-10-07 at 16:42 +0200, Richard Guenther wrote: > On Wed, Oct 7, 2009 at 4:37 PM, Tobias Grosser > <gros...@fim.uni-passau.de> 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