SLPVectorizer: Handle more horizontal reductions (disabled)
authorArnold Schwaighofer <aschwaighofer@apple.com>
Fri, 20 Sep 2013 21:18:20 +0000 (21:18 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Fri, 20 Sep 2013 21:18:20 +0000 (21:18 +0000)
commit074e489dbc0779465cd71a2e10643c156ae5d6d7
treee7a05f205bdbd49df3e420b7b69d923313224648
parent2938e975626e4328215dbba333ee03352dbdaf6a
SLPVectorizer: Handle more horizontal reductions (disabled)

Match reductions starting at binary operation feeding into a phi. The code
handles trees like

 r += v1 + v2 + v3 ...

and

 r += v1
 r += v2
 ...

and

 r *= v1 + v2 + ...

We currently only handle associative operations (add, fadd fast).

The code can now also handle reductions feeding into stores.

 a[i] = v1 + v2 + v3 + ...

The code is currently disabled behind the flag "-slp-vectorize-hor".  The cost
model for most architectures is not there yet.

I found one opportunity of a horizontal reduction feeding a phi in TSVC
(LoopRerolling-flt) and there are several opportunities where reductions feed
into stores.

radar://14607682

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