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

--- Comment #6 from Jan Hubicka <hubicka at ucw dot cz> ---
> void digits_2.isra (integer(kind=4) ISRA.6607)
> { 
>   integer(kind=4) ISRA.6607_927(D) = ISRA.6607;
> ... 
>   # RANGE [irange] integer(kind=4) [-2147483647, 8][10, +INF]
>   _494 = ISRA.6607_927(D) + 1;
> 
> by the time VRP sees it, i think ISRA.6607_927(D) is the actual parameter?   
> if
> you set SSA_NAME_RANGE_INFO (ISRA.6607_927(D)) to [1, +INF] or [1, 10] or
> whatever, VRP will likely do some useful things.  
> 
> VRP can't figure out the non-negative part on its own as the fact that it is
> always [1, INF] is not apparent from within the function. Someone has to
> provide that info via the ssa-name passed as the parameter.  

I think [1,INF] should be determinable from ipa-prop, since we know that
argument starts at 0 and increases by one for each recursive call.  I
suppose we are giving up propagating value ranges to avoid problems with
"infinite depth" of the value range lattice?

Reply via email to