OSDN Git Service

[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)
commit4362efa895aa537011c28658bf33c1d9cba1cc5c
tree8e00a9b4cc1d43299081ce63b59f398544af24e6
parentb02dd20ac2214313b03d121381628a727a8ed099
[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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310255 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Transforms/Vectorize/SLPVectorizer.h
lib/Transforms/Vectorize/SLPVectorizer.cpp
test/Transforms/SLPVectorizer/AArch64/gather-root.ll
test/Transforms/SLPVectorizer/X86/horizontal.ll
test/Transforms/SLPVectorizer/X86/insert-element-build-vector.ll