On 05/02/2018 11:36 AM, Richard Biener wrote:
> On May 2, 2018 6:17:50 PM GMT+02:00, Jeff Law <l...@redhat.com> wrote:
>> On 05/02/2018 03:27 AM, Richard Biener wrote:
>>> On Tue, Apr 10, 2018 at 2:52 AM, Kugan Vivekanandarajah
>>> <kugan.vivekanandara...@linaro.org> wrote:
>>>> I would like to queue this patch for stage1 review.
>>>>
>>>> In DSE, while in dse_classify_store, as soon as we see a PHI use
>>>> statement that is part of the loop, we are immediately giving up.
>>>>
>>>> As far as I understand, this can be improved. Attached patch is
>> trying
>>>> to walk the uses of the PHI statement (by recursively calling
>>>> dse_classify_store) and then making sure the obtained store is
>> indeed
>>>> redundant.
>>>>
>>>> This is partly as reported in one of the testcase from PR44612. But
>>>> this PR is about other issues that is not handled in this patch.
>>>>
>>>> Bootstrapped and regression tested on aarch64-linux-gnu with no new
>> regressions.
>>>>
>>>> Is this OK for next stage1?
>>>
>>>               if (temp
>>>                   /* Make sure we are not in a loop latch block.  */
>>>                   || gimple_bb (stmt) == gimple_bb (use_stmt)
>>> -                 || dominated_by_p (CDI_DOMINATORS,
>>> -                                    gimple_bb (stmt), gimple_bb
>> (use_stmt))
>>>                   /* We can look through PHIs to regions
>> post-dominating
>>>
>>> you are removing part of the latch-block check but not the other.
>>>
>>> +                 /* If stmt dominates PHI stmt, follow the PHI stmt.
>> */
>>> +                 if (!temp)
>>>
>>> well, just do this check earlier.  Or rather, it's already done in
>> the
>>> test above.
>>>
>>> +                     /* Makesure the use stmt found is post
>> dominated.  */
>>> +                     && dominated_by_p (CDI_POST_DOMINATORS,
>>> +                                        gimple_bb (stmt_outer),
>>> gimple_bb (inner_use_stmt))
>>>
>>> I think that this check also covers gimple_bb (stmt_outer) ==
>>> gimple_bb (inner_use_stmt)
>>> so for that case you'd need to check stmt dominance.  But better just
>> give up?
>>>
>>> Given the simple testcases you add I wonder if you want a cheaper
>>> implementation,
>>> namely check that when reaching a loop PHI the only aliasing stmt in
>>> its use-chain
>>> is the use_stmt you reached the PHI from.  That would avoid this and
>> the tests
>>> for the store being redundant and simplify the patch considerably.
>> Yea,  but the ideas in the patch might be useful for some of the other
>> DSE missed optimizations :-)
> 
> Note that what we want in the end is some kind of general partial dead code 
> elimination pass that also handles stores. There was a SSU PRE implementation 
> as part of a gsoc project many years ago. I believe building on top of the 
> ad-hoc DSE pass we have right now is not the very best thing to do long term. 
> SSU PRE also performs store/code sinking thus merging with the also ad-hoc 
> sinking pass... 
If we did good store sinking I think partial dead store elimination just
falls out with the existing tree-ssa-dse.c implementation.  The cases I
was thinking about are already fully redundant, but the structure of
tree-ssa-dse isn't great for discovering them.

jeff

Reply via email to