forked from OSchip/llvm-project
[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:
parent
b4f1bfa659
commit
b33938df7a
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue