On Tue, Oct 6, 2020 at 3:09 PM Martin Liška <mli...@suse.cz> wrote:
>
> On 10/6/20 2:56 PM, Andrew MacLeod wrote:
> > Ah, by just using the outgoing_range class, all you are getting is static 
> > edges.  so a TRUE edge is always a [1,1] and a false edge is [0,0]
> > I provided that class so you could get the constant edges on switches.
> >
> > if you want to get actual ranges for ssa-names, you will need the ranger 
> > (which I think is going in today).  It uses those values as the starting 
> > point for winding back to calculate other dependent names.
>
> Ah, all right!
>
> >
> > Then  you will want to query the ranger for the range of index_5 on that 
> > edge..
>
> Fine! So the only tricky thing here is to select a proper SSA_NAME to query 
> right?
> In my case I need to cover situations like:

Note what ranger will get you has the very same limitations as what
register_edge_assert_for has - it will _not_ necessarily provide
something that, when "concatenated" with &&, reproduces the
original condition in full its full semantics.  That is, it's not a condition
"decomposition" tool either.

Richard.

>    index.0_1 = (unsigned int) index_5(D);
>    _2 = index.0_1 + 4294967287;
>    if (_2 <= 114)
>
> or
>
>      _1 = aChar_8(D) == 1;
>      _2 = aChar_8(D) == 10;
>      _3 = _1 | _2;
>      if (_3 != 0)
>
> Anything Ranger can help me with?
>
> Martin
>
> >
> > so you will need a gimple ranger instance instead of an outgoing_range 
> > object.
> >
> > Andrew
>

Reply via email to