[SLP] General improvements of SLP vectorization process.
authorAlexey Bataev <a.bataev@hotmail.com>
Mon, 7 Aug 2017 15:25:49 +0000 (15:25 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Mon, 7 Aug 2017 15:25:49 +0000 (15:25 +0000)
commit9581b42589d72d1c931c4bcbc0101df7c507e27e
tree9dc9c13fffbf8b481b51046bd59b054dd22effd9
parentfaeac6b15edb504985eb66ecca09b681ee48aa53
[SLP] General improvements of SLP vectorization process.

Patch tries to improve two-pass vectorization analysis, existing in SLP vectorizer. What it does:

1. Defines key nodes, that are the vectorization roots. Previously vectorization started if StoreInst or ReturnInst is found. For now, the vectorization started for all Instructions with no users and void types (Terminators, StoreInst) + CallInsts.
2. CmpInsts, InsertElementInsts and InsertValueInsts are stored in the
array. This array is processed only after the vectorization of the
first-after-these instructions key node is finished. Vectorization goes
in reverse order to try to vectorize as much code as possible.

Reviewers: mzolotukhin, Ayal, mkuper, gilr, hfinkel, RKSimon

Subscribers: ashahid, anemet, RKSimon, mssimpso, llvm-commits

Differential Revision: https://reviews.llvm.org/D29826

llvm-svn: 310260
llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
llvm/test/Transforms/SLPVectorizer/AArch64/gather-root.ll
llvm/test/Transforms/SLPVectorizer/X86/horizontal.ll
llvm/test/Transforms/SLPVectorizer/X86/insert-element-build-vector.ll