On 10/1/19 12:40 AM, Richard Biener wrote:
> On Mon, 30 Sep 2019, Prathamesh Kulkarni wrote:
> 
>> On Wed, 25 Sep 2019 at 23:44, Richard Biener <rguent...@suse.de> wrote:
>>>
>>> On Wed, 25 Sep 2019, Prathamesh Kulkarni wrote:
>>>
>>>> On Fri, 20 Sep 2019 at 15:20, Jeff Law <l...@redhat.com> wrote:
>>>>>
>>>>> On 9/19/19 10:19 AM, Prathamesh Kulkarni wrote:
>>>>>> Hi,
>>>>>> For PR91532, the dead store is trivially deleted if we place dse pass
>>>>>> between ifcvt and vect. Would it be OK to add another instance of dse 
>>>>>> there ?
>>>>>> Or should we add an ad-hoc "basic-block dse" sub-pass to ifcvt that
>>>>>> will clean up the dead store ?
>>>>> I'd hesitate to add another DSE pass.  If there's one nearby could we
>>>>> move the existing pass?
>>>> Well I think the nearest one is just after pass_warn_restrict. Not
>>>> sure if it's a good
>>>> idea to move it up from there ?
>>>
>>> You'll need it inbetween ifcvt and vect so it would be disabled
>>> w/o vectorization, so no, that doesn't work.
>>>
>>> ifcvt already invokes SEME region value-numbering so if we had
>>> MESE region DSE it could use that.  Not sure if you feel like
>>> refactoring DSE to work on regions - it currently uses a DOM
>>> walk which isn't suited for that.
>>>
>>> if-conversion has a little "local" dead predicate compute removal
>>> thingy (not that I like that), eventually it can be enhanced to
>>> do the DSE you want?  Eventually it should be moved after the local
>>> CSE invocation though.
>> Hi,
>> Thanks for the suggestions.
>> For now, would it be OK to do "dse" on loop header in
>> tree_if_conversion, as in the attached patch ?
>> The patch does local dse in a new function ifcvt_local_dse instead of
>> ifcvt_local_dce, because it needed to be done after RPO VN which
>> eliminates:
>> Removing dead stmt _ifc__62 = *_55;
>> and makes the following store dead:
>> *_55 = _ifc__61;
> 
> I suggested trying to move ifcvt_local_dce after RPO VN, you could
> try that as independent patch (pre-approved).
> 
> I don't mind the extra walk though.
> 
> What I see as possible issue is that dse_classify_store walks virtual
> uses and I'm not sure if the loop exit is a natural boundary for
> such walk (eventually the loop header virtual PHI is reached but
> there may also be a loop-closed PHI for the virtual operand,
> but not necessarily).  So the question is whether to add a
> "stop at" argument to dse_classify_store specifying the virtual
> use the walk should stop at?
I think we want to stop at the block boundary -- aren't the cases we
care about here local to a block?

jeff

Reply via email to