[RFC] [P2] [PR tree-optimization/33562] Lowering more complex assignments.

Jeff Law law@redhat.com
Sun Feb 14 16:35:00 GMT 2016


On 02/12/2016 10:21 AM, Jeff Law wrote:
>> But really we simply need a better DSE algorithm.
> So the way to fix DSE is to keep the existing algorithm and track the
> hunks of Complex/aggregates that have been set a second time.
>
> My first thought was to implement this as an inverted bitmap.  ie, set
> it to 1 for every byte in the complex/aggregate that is set by the first
> store.  Clear bits for each byte in subsequent stores to the pieces. If
> the bitmap reaches an empty state, then the initial store is dead.
>
> Adjusting *ref could work too, but would probably be painful if the
> subsequent stores don't happen in a convenient order.
So that was scary easy.  We should have done this a long time ago.

Essentially I call ao_get_ref_base to get the offset/size/max_size 
filled in for the first statement.  Those are used to initialize the 
live bytes bitfield, as long as max_size != -1.

Then when we have a possible killing statement, we use the ao in a 
similar manner to determine which bytes to clear (taking care that the 
base is the same between the two references and that in the killing 
statement that the size/max_size are the same.).

When all the live bytes are zero then we've killed the original statement.

It's ~20 lines of code.

I need to pull together some additional tests, but it looks likely we'll 
be able to wrap this up easily for gcc-6.

Jeff



More information about the Gcc-patches mailing list