> 
> On 11/15/24 10:19, Jan Hubicka wrote:
> > > I have seen this happen when the result of the intersection is an empty
> > > set (one of the few comments in value-range.h actually describes an
> > > undefined range as an "empty range").  I have only seen this happen when
> > > the edge has been redirected to builtin_unreachable because, the has
> > > been recognized as impossible.  But I am not absolutely convinced we can
> > > rely on that always being the case.
> > > 
> > > We can decide to not update jump functions for edges leading to
> > > gcc_unreachable, after we have given some thought what to do about
> > > reference description counts, but that is a separate effort, I'd say.
> > Hmm, I wonder in what scenarios empty range can happen.   Probably we
> > could redirect such edges to unreachable since such code path can not be
> > taken?
> > 
> > It is however probably rare enough to not matter that much in practice.
> > 
> > Honza
> > 
> Empty ranges invariably mean unreachable code.
> 
> if (x > 50)    // range is [51, +INF]
>   if (x < 40)  // range is [-INF, 40]

This looks like something reasonably possible.  I would expect some of libstdc++
checks which leads to various calls of throw can be eliminated by this.
> 
> When the 2 calculated ranges intersect, we get UNDEFINED or the empty
> range.   It basically means on this path, X cannot have a range, which makes
> it unreachable. You dont see it often because VRP, threading and such often
> remove these situations before they are observed.
> 
> The only other time I think  it can happen is when we are dealing with
> uninitialized values.  Sometimes if there is no definition, it can be
> UNDEFINED.. this allows us to pick other values for it so we can do
> optimizations.   I think thats a special case we do however.     I *think*
> as a general user you will get VARYING for uninitialized values.  Looking
> through gimple_range_global() (which is used when no value has been or can
> be calculated), any undefined values come back VARYING.
> 
> After all that, I think you could redirect those edges to unreachable...

Which sounds like a good idea then..
Honza
> 
> Andrew
> 
> 
> 

Reply via email to