[LV] Generate both scalar and vector integer induction variables
authorMatthew Simpson <mssimpso@codeaurora.org>
Tue, 2 Aug 2016 15:25:16 +0000 (15:25 +0000)
committerMatthew Simpson <mssimpso@codeaurora.org>
Tue, 2 Aug 2016 15:25:16 +0000 (15:25 +0000)
commit18d88983179a300adcae41c835fbcf7990c91b2d
tree481776138dad13c03e9e14f6a4463028fdfaf486
parent7a7004a9993d3715e741aaafecf90ad9d5af7cf9
[LV] Generate both scalar and vector integer induction variables

This patch enables the vectorizer to generate both scalar and vector versions
of an integer induction variable for a given loop. Previously, we only
generated a scalar induction variable if we knew all its users were going to be
scalar. Otherwise, we generated a vector induction variable. In the case of a
loop with both scalar and vector users of the induction variable, we would
generate the vector induction variable and extract scalar values from it for
the scalar users. With this patch, we now generate both versions of the
induction variable when there are both scalar and vector users and select which
version to use based on whether the user is scalar or vector.

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

llvm-svn: 277474
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/test/Transforms/LoopVectorize/X86/scatter_crash.ll
llvm/test/Transforms/LoopVectorize/induction.ll