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

Reply via email to