[SLP] Enhance SLPVectorizer to vectorize different combinations of aggregates
authorAnton Afanasyev <anton.a.afanasyev@gmail.com>
Thu, 21 Nov 2019 15:41:52 +0000 (18:41 +0300)
committerAnton Afanasyev <anton.a.afanasyev@gmail.com>
Tue, 3 Dec 2019 16:29:27 +0000 (19:29 +0300)
commita315519c17abaa621eddd30fd116ac2e030a36e9
treebc61fc6262033e5c997fd199df3f30dd6e64b789
parentc094e7dc4b3f9d1c1e590b008bb1cc46e3496abd
[SLP] Enhance SLPVectorizer to vectorize different combinations of aggregates

Summary:
Make SLPVectorize to recognize homogeneous aggregates like
`{<2 x float>, <2 x float>}`, `{{float, float}, {float, float}}`,
`[2 x {float, float}]` and so on.
It's a follow-up of https://reviews.llvm.org/D70068.
Merged `findBuildVector()` and `findBuildAggregate()` to
one `findBuildAggregate()` function making it recursive
to recognize multidimensional aggregates. Aggregates required
to be homogeneous.

Reviewers: RKSimon, ABataev, dtemirbulatov, spatel, vporpo

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D70587
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
llvm/test/Transforms/SLPVectorizer/X86/pr42022.ll