[LLVMdev] [llvm] r187267 - SLP Vectorier: Don't vectorize really short chains because they are already handled by the SelectionDAG store-vectorizer, which does a better job in deciding when to vectorize.

Daniel Berlin dberlin at dberlin.org
Sat Jul 27 10:48:12 PDT 2013


Hi Nadav,

Okay.

1. The comment doesn't make this clear. I would suggest, at a minimum,
updating it to mention pairs specifically, to avoid the issue in #2

2. If the day comes when the selectiondag store vectorizer handles more
than pairs, and does so better, is anyone really going to remember this
random 3 exists in the other vectorizer?

I would posit, based on experience, the answer is "no" :)



On Fri, Jul 26, 2013 at 7:56 PM, Nadav Rotem <nrotem at apple.com> wrote:

> Hi Daniel,
>
> Maybe my commit message was not clear. The idea is that the SelectionDAG
> store vectorizer can only handle pairs. So, the number three means "more
> than a pair".
>
> Thanks,
> Nadav
>
> Sent from my iPhone
>
> On Jul 26, 2013, at 17:48, Daniel Berlin <dberlin at dberlin.org> wrote:
>
> Hey Nadav,
> I'd humbly suggest that rather than use 3 directly, you should add a
> shared constant between these two passes, so when one changes, the other
> doesn't need to be updated. It would also ensure this bit of info about
> what needs to be updated isn't only contained in the comments..
>
> On Fri, Jul 26, 2013 at 4:07 PM, Nadav Rotem <nrotem at apple.com> wrote:
>
>> Author: nadav
>> Date: Fri Jul 26 18:07:55 2013
>> New Revision: 187267
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=187267&view=rev
>> Log:
>> SLP Vectorier:  Don't vectorize really short chains because they are
>> already handled by the SelectionDAG store-vectorizer, which does a
>> better job in deciding when to vectorize.
>
>
>
>>
>> Modified: llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp?rev=187267&r1=187266&r2=187267&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp Fri Jul 26
>> 18:07:55 2013
>> @@ -898,8 +898,12 @@ int BoUpSLP::getTreeCost() {
>>    DEBUG(dbgs() << "SLP: Calculating cost for tree of size " <<
>>          VectorizableTree.size() << ".\n");
>>
>> -  if (!VectorizableTree.size()) {
>> -    assert(!ExternalUses.size() && "We should not have any external
>> users");
>> +  // Don't vectorize tiny trees. Small load/store chains or consecutive
>> stores
>> +  // of constants will be vectoried in SelectionDAG in
>> MergeConsecutiveStores.
>> +  if (VectorizableTree.size() < 3) {
>> +    if (!VectorizableTree.size()) {
>> +      assert(!ExternalUses.size() && "We should not have any external
>> users");
>> +    }
>>      return 0;
>>    }
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130727/c4095ccc/attachment.html>


More information about the llvm-dev mailing list