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