[llvm-dev] [Proposal][RFC] Epilog loop vectorization
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Mon Feb 27 12:01:19 PST 2017
On 02/27/2017 01:47 PM, Daniel Berlin wrote:
>
>
> On Mon, Feb 27, 2017 at 11:29 AM, Adam Nemet <anemet at apple.com
> <mailto:anemet at apple.com>> wrote:
>
>
>> On Feb 27, 2017, at 10:11 AM, Hal Finkel <hfinkel at anl.gov
>> <mailto:hfinkel at anl.gov>> wrote:
>>
>>
>> On 02/27/2017 11:47 AM, Adam Nemet wrote:
>>>
>>>> On Feb 27, 2017, at 9:39 AM, Daniel Berlin <dberlin at dberlin.org
>>>> <mailto:dberlin at dberlin.org>> wrote:
>>>>
>>>>
>>>>
>>>> On Mon, Feb 27, 2017 at 9:29 AM, Adam Nemet <anemet at apple.com
>>>> <mailto:anemet at apple.com>> wrote:
>>>>
>>>>
>>>>> On Feb 27, 2017, at 7:27 AM, Hal Finkel <hfinkel at anl.gov
>>>>> <mailto:hfinkel at anl.gov>> wrote:
>>>>>
>>>>>
>>>>> On 02/27/2017 06:29 AM, Nema, Ashutosh wrote:
>>>>>> Thanks for looking into this.
>>>>>> 1) Issues with re running vectorizer:
>>>>>> Vectorizer might generate redundant alias checks while
>>>>>> vectorizing epilog loop.
>>>>>> Redundant alias checks are expensive, we like to reuse
>>>>>> the results of already computed alias checks.
>>>>>> With metadata we can limit the width of epilog loop, but
>>>>>> not sure about reusing alias check result.
>>>>>> Any thoughts on rerunning vectorizer with reusing the
>>>>>> alias check result ?
>>>>>
>>>>> One way of looking at this is: Reusing the alias-check
>>>>> result is really just a conditional propagation problem;
>>>>> if we don't already have an optimization that can combine
>>>>> these after the fact, then we should.
>>>>
>>>> +Danny
>>>>
>>>> Isn’t Extended SSA supposed to help with this?
>>>>
>>>>
>>>> Yes, it will solve this with no issue already. GVN probably
>>>> does already too.
>>>>
>>>> even if if you have
>>>>
>>>> if (a == b)
>>>> if (a == c)
>>>> if (a == d)
>>>> if (a == e)
>>>> if (a == g)
>>>>
>>>>
>>>> and we can prove a ... g equivalent, newgvn will eliminate
>>>> them all and set all the branches true.
>>>>
>>>> If you need a simpler clean up pass, we could run it on sub-graphs.
>>>
>>> Yes we probably don’t want to run a full GVN after the
>>> “loop-scheduling” passes.
>>
>> FWIW, we could, just without the memory-dependence analysis
>> enabled (i.e. set the NoLoads constructor parameter to true). GVN
>> is pretty fast in that mode.
>
> OK. Another data point is that I’ve seen cases in the past where
> the alias checks required for the loop passes could enable GVN to
> remove redundant loads/stores. Currently we can only pick these
> up with LTO when GVN is rerun.
>
>
> This is just GVN brokenness, newgvn should not have this problem.
> If it does, i'd love to see it.
I thought that the problem is that we just don't run GVN after that
point in the pipeline.
-Hal
>
> (I'm working on the last few parts of turning it on by default, but it
> requires a new getModRefInfo interface to be able to get the last few
> testcases)
>
--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170227/07d7de24/attachment.html>
More information about the llvm-dev
mailing list