SLPVectorizer: Sort inputs to commutative binary operations
authorArnold Schwaighofer <aschwaighofer@apple.com>
Fri, 4 Oct 2013 20:39:16 +0000 (20:39 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Fri, 4 Oct 2013 20:39:16 +0000 (20:39 +0000)
commitaf57bdf7d673a3731fb887218e7a9ccd1576ab4f
tree0c904746bc10108be370353aa7cbd9831bd79a1e
parente3fd646e178f92dbe2737a5230d73577090d9d0e
SLPVectorizer: Sort inputs to commutative binary operations

Sort the operands of the other entries in the current vectorization root
according to the first entry's operands opcodes.

%conv0 = uitofp ...
%load0 = load float ...

= fmul %conv0, %load0
= fmul %load0, %conv1
= fmul %load0, %conv2

Make sure that we recursively vectorize <%conv0, %conv1, %conv2> and <%load0,
%load0, %load0>.

This makes it more likely to obtain vectorizable trees. We have to be careful
when we sort that we don't destroy 'good' existing ordering implied by source
order.

radar://15080067

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191977 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Vectorize/SLPVectorizer.cpp
test/Transforms/SLPVectorizer/X86/operandorder.ll [new file with mode: 0644]