[LV] Report multiple reasons for not vectorizing under allowExtraAnalysis
authorAyal Zaks <ayal.zaks@intel.com>
Tue, 23 May 2017 07:08:02 +0000 (07:08 +0000)
committerAyal Zaks <ayal.zaks@intel.com>
Tue, 23 May 2017 07:08:02 +0000 (07:08 +0000)
commit589e1d9610d1eed8e06c9424c4726a504d43391c
tree6a93025d7d662eb14a3e2bb2b382c709119eb782
parent53fc355e7d4c3a6cef1d8ebdc5d7b35e61e7f9db
[LV] Report multiple reasons for not vectorizing under allowExtraAnalysis

The default behavior of -Rpass-analysis=loop-vectorizer is to report only the
first reason encountered for not vectorizing, if one is found, at which time the
vectorizer aborts its handling of the loop. This patch allows multiple reasons
for not vectorizing to be identified and reported, at the potential expense of
additional compile-time, under allowExtraAnalysis which can currently be turned
on by Clang's -fsave-optimization-record and opt's -pass-remarks-missed.

Removed from LoopVectorizationLegality::canVectorize() the redundant checking
and reporting if we CantComputeNumberOfIterations, as LAI::canAnalyzeLoop() also
does that. This redundancy is caught by a lit test once multiple reasons are
reported.

Patch initially developed by Dror Barak.

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

llvm-svn: 303613
llvm/docs/Vectorizers.rst
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/test/Transforms/LoopVectorize/X86/vectorization-remarks-missed.ll