[InstCombine] remove overzealous assert for shuffles (PR41419)

As the TODO indicates, instsimplify could be improved.

Should fix:
https://bugs.llvm.org/show_bug.cgi?id=41419

llvm-svn: 357910
This commit is contained in:
Sanjay Patel 2019-04-08 13:28:29 +00:00
parent b4f1bfa659
commit b33938df7a
2 changed files with 12 additions and 2 deletions

View File

@ -1353,8 +1353,8 @@ static Instruction *foldSelectShuffle(ShuffleVectorInst &Shuf,
// Canonicalize to choose from operand 0 first.
unsigned NumElts = Shuf.getType()->getVectorNumElements();
if (Shuf.getMaskValue(0) >= (int)NumElts) {
assert(!isa<UndefValue>(Shuf.getOperand(1)) &&
"Not expecting undef shuffle operand with select mask");
// TODO: Can we assert that both operands of a shuffle-select are not undef
// (otherwise, it would have been folded by instsimplify?
Shuf.commute();
return &Shuf;
}

View File

@ -1454,3 +1454,13 @@ define <4 x i8> @or_add_2_vars(<4 x i8> %v, <4 x i8> %v1) {
ret <4 x i8> %t3
}
; The undef operand is used to simplify the shuffle mask, but don't assert that too soon.
define <4 x i32> @PR41419(<4 x i32> %v) {
; CHECK-LABEL: @PR41419(
; CHECK-NEXT: ret <4 x i32> [[V:%.*]]
;
%s = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 4, i32 5, i32 2, i32 7>
ret <4 x i32> %s
}