[CostModel] Fixed isExtractSubvectorMask for undef index off end
authorTim Renouf <tpr@botech.co.uk>
Fri, 8 Nov 2019 13:34:17 +0000 (13:34 +0000)
committerTim Renouf <tpr@botech.co.uk>
Fri, 8 Nov 2019 15:40:09 +0000 (15:40 +0000)
commit0703db39892949ced56590a1ec8586bf20bffdb4
tree082fe3bb8dd048124d5c9a4ce8667d77ab815dbc
parenta3db9c08ebdf1f39ed89f4a7afa09fc153cf98c5
[CostModel] Fixed isExtractSubvectorMask for undef index off end

ShuffleVectorInst::isExtractSubvectorMask, introduced in
  [CostModel] Add SK_ExtractSubvector handling to getInstructionThroughput (PR39368)

erroneously thought that
%340 = shufflevector <4 x float> %339, <4 x float> undef, <3 x i32> <i32 2, i32 3, i32 undef>

is a subvector extract, even though it goes off the end of the parent
vector with the undef index. That then caused an assert in
BasicTTIImplBase::getExtractSubvectorOverhead.

This commit fixes that, by not considering the above a subvector
extract.

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

Change-Id: I87b8b00b24bef19ffc9a1b82ef4eca3b8a246eaf
llvm/lib/IR/Instructions.cpp
llvm/test/Analysis/CostModel/X86/shuffle-extract_subvector.ll