[LV] Don't call recordVectorLoopValueForInductionCast for newly-created IV from a...
authorAndrei Elovikov <andrei.elovikov@intel.com>
Mon, 15 Jan 2018 10:56:07 +0000 (10:56 +0000)
committerAndrei Elovikov <andrei.elovikov@intel.com>
Mon, 15 Jan 2018 10:56:07 +0000 (10:56 +0000)
commit7457aa0bce3352d9ca22d1a7435d2763def8e885
tree98aafd519884512ec9743d120fe2b673429893c8
parentcc2ba028170e4f00b7f9edc260cf1e833e6eda27
[LV] Don't call recordVectorLoopValueForInductionCast for newly-created IV from a trunc.

Summary:
This method is supposed to be called for IVs that have casts in their use-def
chains that are completely ignored after vectorization under PSE. However, for
truncates of such IVs the same InductionDescriptor is used during
creation/widening of both original IV based on PHINode and new IV based on
TruncInst.

This leads to unintended second call to recordVectorLoopValueForInductionCast
with a VectorLoopVal set to the newly created IV for a trunc and causes an
assert due to attempt to store new information for already existing entry in the
map. This is wrong and should not be done.

Fixes PR35773.

Reviewers: dorit, Ayal, mssimpso

Reviewed By: dorit

Subscribers: RKSimon, dim, dcaballe, hsaito, llvm-commits, hiraditya

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

llvm-svn: 322473
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/test/Transforms/LoopVectorize/pr35773.ll [new file with mode: 0644]