https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105346
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aldyh at gcc dot gnu.org --- Comment #12 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- (In reply to Andrew Macleod from comment #11) > - The relation oracle currently only works with ssa-names. > - Ranger also doesn't currently track that sort of symbolic equivalence with > irange. > - the VRP passes have a pointer tracking mechanism as part of the dom walk, > and the call to rvrp_folder::value_of_expr (bufp_2) would give us &buf. I > also think we also would fold the stmt in VRP. This could in theory be > extended to any pass doing a dom walk. however: > - I believe the upcoming prange extension for pointer ranges in stage 1 will > make this happen naturally with rangers query system. range_of_stmt ( if > <..>) would then produce bool [0, 0]. I would also expect that prange will > have an easy way to ask what its base/equivalence(s) are. Yeah, ranger itself doesn't deal with MEM_REF's and the like. We work around this in evrp by using the pointer_equiv_analyzer class which tracks pointer equality in a DOM walk. But this is only used by the evrp pass (not the threader or any other ranger client). prange should indeed take care of this. It tracks pointer equality, POINTER_PLUS_EXPR, POINTER_DIFF_EXPR, etc. As you say, range_of_stmt should be able to trivially fold the conditional. For that matter, the pointer query code could probably all be replaced with prange, instead of the ad-hoc pointer tracking it does.