Project Ranger Update

Andrew MacLeod amacleod@redhat.com
Thu Nov 7 16:19:00 GMT 2019


With the end of stage 1 approaching, I figure its time for an update on 
project Ranger.

range-ops was integrated with trunk on Oct 2, all ranges are generated 
now using this component.

GORI-computes was the other piece we were hoping to get in. This 
component is "Generates Outgoing Range Info" for blocks, and basically 
replaces the assert mechanism.  We have reworked it and wired it into 
EVRP and can successfully use it to generate ranges for EVRP.   The 
unexpected problem we encountered was actually related to the 
limitations of value_range.

Aldy has successfully wired GORI in to EVRP.   We can generate the a 
range the current way, also generate a range with GORI, and then compare 
them.   While we found we could generate some ranges better, ie:

     improved: _2 from: unsigned int [1, +INF] to: unsigned int [8, +INF]

  there was often a lot of noise where we'd just generate something 
"different".  ie:

    _47 from: short unsigned int ~[11, 11] to: short unsigned int ~[8, 9]

This happens because we knew is wasn't 8,9 or 11... but the limitation 
of a single subrange/anti-range in value_range means we couldn't 
represent it.   We found this to be a very frequent occurrence, and my 
worry is that if we generate  a bunch of different ranges, we end up 
with bug reports where we don't optimize/warn about something we use to. 
Fixing something due to a representational problem like this is not 
easily resolved without hackery, and I'm not interested in chasing down 
a bunch of problems that are only problems due to the limitations of 
value_range.

So, we've decided on a change of plan, and will *not* try to get GORI in 
before the end of stage 1.

Instead, we're going to move to branch development.  the branch is 
"ranger", which was our staging branch and has the initial attempt at 
bringing GORI to trunk.  This will become our ongoing development 
branch, and once we get up to speed we will post to gcc-patches the 
current differences and all future patches with the [ranger]  tag. This 
will allow anyone that is interested to follow and/or comment.   I would 
expect this to happen shortly after stage 1 ends, if not before.  We 
will also try to keep this branch merged with trunk on a regular basis

we'll start with GORI being wired into EVRP and producing ranges which 
are the intersection of EVRPs current range, and what GORI produces.  
The short term goal is that GORI will always produce ranges where this 
intersection is the same as what GORI produces, thereby eliminating the 
need for the ASSERT mechanism.

The path from here to there involves doing the following work on the branch:
  * enhance value_range to support multiple sub-ranges.... effectively 
merging irange and value_range. We think we can add multiple sub-ranges 
while maintain the current behaviour for ANTI-ranges and symbolics when 
there is only a single subrange. We can then more precisely evaluate 
whether the new ranges are better or not.
  * the long awaited equivalence/relational tracker so we can remove 
symbolics and anti-range from value_range
  * re-integration of the on-demand framework with GORI.

Currently we are fleshing out a few changes into trunk before stage 1 
ends to facilitate branch maintenance leading through to the next stage 1.

As we come up to speed and start working with each major piece, we'll 
provide a rundown of whats involved.

Thats it for now... next update in a couple of weeks!

Andrew



More information about the Gcc mailing list