On February 14, 2016 5:35:13 PM GMT+01:00, Jeff Law <l...@redhat.com> wrote:
>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.

BTW, we had sth like this before but it had both correctness and more 
importantly scalability issues.

Richard.

>Jeff


Reply via email to