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 >