[SLP] General improvements of SLP vectorization process.
authorAlexey Bataev <a.bataev@hotmail.com>
Mon, 7 Aug 2017 14:03:17 +0000 (14:03 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Mon, 7 Aug 2017 14:03:17 +0000 (14:03 +0000)
commitfaace8f1f16503d2167b8c227e5eaab43390f6b5
tree50f70100e5b8420dea863275de0cfecf313cdb80
parentb2f3fad40c07238825ea48f5e0a8956d49237396
[SLP] General improvements of SLP vectorization process.

Summary:
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: 310255
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