https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117875

--- Comment #9 from Jan Hubicka <hubicka at ucw dot cz> ---
> > But maybe I'm missing something?
> 
> I guess the issue is that with
> 
> # k_24 = PHI <1(13), k_29(16)>
> 
> to easily see this we'd have to compute the range of
> (unsigned int) M_9(D) - 1 and the range of (unsigned int) M_9(D) - (unsigned)
> k_29 and then see those are the same singleton.  I don't think we can
> arrive here when using the range of k_24 itself, so maybe I'm asking too
> much of VRP here.

Yes, I don't see how ranger can figure out easily the singleton range,
since final value of the iteration is variable.
Last year I looked into it and I kind of remember implementing special
matching code, but can not find the patch anymore. The code checking
loop1->any_estimate can be generalized to check for estimate of one of
the loop and adjust the other accordingly.

It is scev_cprop pass that does replace the use of IV value use out of
loops by its bound. As in:
#include <stdio.h>
int test(int n)
{
        int i;
        if (n < 0)
                return -1;
        for (i = 0; i < n; i++)
                printf ("%i\n",i);
        return i;
}

Maybe we want to be able to run it on a specific loop and run it on
loop1 between split finishes updating IL and before profile update?

Reply via email to