[SLP] Fix PR36481: vectorize reassociated instructions.
authorAlexey Bataev <a.bataev@hotmail.com>
Mon, 2 Apr 2018 14:51:37 +0000 (14:51 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Mon, 2 Apr 2018 14:51:37 +0000 (14:51 +0000)
commit3decaf4275be5062167db6b82d9a3e6a10460360
tree554744e6f054a263e40c55d997c6517dfefb2e05
parent426f0ceb8aafe941615f333f63596c6f59fc4a18
[SLP] Fix PR36481: vectorize reassociated instructions.

Summary:
If the load/extractelement/extractvalue instructions are not originally
consecutive, the SLP vectorizer is unable to vectorize them. Patch
allows reordering of such instructions.

Reviewers: RKSimon, spatel, hfinkel, mkuper, Ayal, ashahid

Subscribers: llvm-commits

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

llvm-svn: 328980
llvm/include/llvm/Analysis/LoopAccessAnalysis.h
llvm/lib/Analysis/LoopAccessAnalysis.cpp
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
llvm/test/Transforms/SLPVectorizer/X86/external_user_jumbled_load.ll
llvm/test/Transforms/SLPVectorizer/X86/extract.ll
llvm/test/Transforms/SLPVectorizer/X86/jumbled-load-multiuse.ll
llvm/test/Transforms/SLPVectorizer/X86/jumbled-load-shuffle-placement.ll
llvm/test/Transforms/SLPVectorizer/X86/jumbled-load-used-in-phi.ll
llvm/test/Transforms/SLPVectorizer/X86/jumbled-load.ll
llvm/test/Transforms/SLPVectorizer/X86/reassociated-loads.ll
llvm/test/Transforms/SLPVectorizer/X86/store-jumbled.ll