mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
[IR] ShuffleVectorInst::isIdentityWithPadding - bail on non-fixed-type vector shuffles.
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=27416
This commit is contained in:
parent
1bd5b6795d
commit
62500c8769
@ -2225,6 +2225,12 @@ bool ShuffleVectorInst::isExtractSubvectorMask(ArrayRef<int> Mask,
|
|||||||
bool ShuffleVectorInst::isIdentityWithPadding() const {
|
bool ShuffleVectorInst::isIdentityWithPadding() const {
|
||||||
if (isa<UndefValue>(Op<2>()))
|
if (isa<UndefValue>(Op<2>()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// FIXME: Not currently possible to express a shuffle mask for a scalable
|
||||||
|
// vector for this case.
|
||||||
|
if (isa<ScalableVectorType>(getType()))
|
||||||
|
return false;
|
||||||
|
|
||||||
int NumOpElts = cast<FixedVectorType>(Op<0>()->getType())->getNumElements();
|
int NumOpElts = cast<FixedVectorType>(Op<0>()->getType())->getNumElements();
|
||||||
int NumMaskElts = cast<FixedVectorType>(getType())->getNumElements();
|
int NumMaskElts = cast<FixedVectorType>(getType())->getNumElements();
|
||||||
if (NumMaskElts <= NumOpElts)
|
if (NumMaskElts <= NumOpElts)
|
||||||
@ -2248,7 +2254,7 @@ bool ShuffleVectorInst::isIdentityWithExtract() const {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// FIXME: Not currently possible to express a shuffle mask for a scalable
|
// FIXME: Not currently possible to express a shuffle mask for a scalable
|
||||||
// vector for this case
|
// vector for this case.
|
||||||
if (isa<ScalableVectorType>(getType()))
|
if (isa<ScalableVectorType>(getType()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -83,3 +83,20 @@ define <vscale x 4 x float> @insertelement_sequene_may_not_be_splat(float %x) {
|
|||||||
%t3 = insertelement <vscale x 4 x float> %t2, float %x, i32 3
|
%t3 = insertelement <vscale x 4 x float> %t2, float %x, i32 3
|
||||||
ret <vscale x 4 x float> %t3
|
ret <vscale x 4 x float> %t3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; OSS-Fuzz #27416
|
||||||
|
; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=27416
|
||||||
|
define void @ossfuzz_27416(i32 %v) {
|
||||||
|
; CHECK-LABEL: @ossfuzz_27416(
|
||||||
|
; CHECK-NEXT: [[IN:%.*]] = insertelement <vscale x 4 x i32> undef, i32 [[V:%.*]], i32 0
|
||||||
|
; CHECK-NEXT: [[SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[IN]], <vscale x 4 x i32> undef, <vscale x 4 x i32> zeroinitializer
|
||||||
|
; CHECK-NEXT: [[I1:%.*]] = insertelement <vscale x 4 x i32> [[SPLAT]], i32 undef, i8 -128
|
||||||
|
; CHECK-NEXT: store <vscale x 4 x i32> [[I1]], <vscale x 4 x i32>* undef, align 16
|
||||||
|
; CHECK-NEXT: ret void
|
||||||
|
;
|
||||||
|
%in = insertelement <vscale x 4 x i32> undef, i32 %v, i32 0
|
||||||
|
%splat = shufflevector <vscale x 4 x i32> %in, <vscale x 4 x i32> undef, <vscale x 4 x i32> zeroinitializer
|
||||||
|
%I1 = insertelement <vscale x 4 x i32> %splat, i32 undef, i8 -128
|
||||||
|
store <vscale x 4 x i32> %I1, <vscale x 4 x i32>* undef, align 16
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user