SLPVectorizer: Bring back the insertelement patch (r205965) with fixes
authorArnold Schwaighofer <aschwaighofer@apple.com>
Sun, 4 May 2014 17:10:15 +0000 (17:10 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Sun, 4 May 2014 17:10:15 +0000 (17:10 +0000)
commit28a739b4dcd88fc55adc521d2017a831ca7286c9
treea412a6bbc9aa990818e486e43176434bf4cd72cf
parent8a3751f8132e8b0ef8fa35bfcc0f13029595c266
SLPVectorizer: Bring back the insertelement patch (r205965) with fixes

When can't assume a vectorized tree is rooted in an instruction. The IRBuilder
could have constant folded it. When we rebuild the build_vector (the series of
InsertElement instructions) use the last original InsertElement instruction. The
vectorized tree root is guaranteed to be before it.

Also, we can't assume that the n-th InsertElement inserts the n-th element into
a vector.

This reverts r207746 which reverted the revert of the revert of r205018 or so.

Fixes the test case in PR19621.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207939 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Vectorize/SLPVectorizer.cpp
test/Transforms/SLPVectorizer/X86/insert-element-build-vector.ll
test/Transforms/SLPVectorizer/X86/value-bug.ll [new file with mode: 0644]