Skip to content

Commit d504717

Browse files
committed
Add an explicit guard for length changing shuffles
1 parent 0c0a09a commit d504717

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,8 +477,8 @@ costShuffleViaVRegSplitting(RISCVTTIImpl &TTI, MVT LegalVT,
477477
InstructionCost RISCVTTIImpl::getSlideCost(FixedVectorType *Tp,
478478
ArrayRef<int> Mask,
479479
TTI::TargetCostKind CostKind) {
480-
// Avoid missing masks
481-
if (Mask.size() <= 2)
480+
// Avoid missing masks and length changing shuffles
481+
if (Mask.size() <= 2 || Mask.size() != Tp->getNumElements())
482482
return InstructionCost::getInvalid();
483483

484484
int NumElts = Tp->getNumElements();

llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,16 +235,17 @@ define ptr @test4() {
235235
define i32 @test5() {
236236
; CHECK-LABEL: @test5(
237237
; CHECK-NEXT: entry:
238-
; CHECK-NEXT: [[DIV0:%.*]] = fdiv <2 x double> zeroinitializer, zeroinitializer
239-
; CHECK-NEXT: [[DIV1:%.*]] = fdiv <2 x double> zeroinitializer, zeroinitializer
238+
; CHECK-NEXT: [[TMP0:%.*]] = call <4 x double> @llvm.vector.insert.v4f64.v2f64(<4 x double> poison, <2 x double> zeroinitializer, i64 0)
239+
; CHECK-NEXT: [[TMP1:%.*]] = call <4 x double> @llvm.vector.insert.v4f64.v2f64(<4 x double> [[TMP0]], <2 x double> zeroinitializer, i64 2)
240+
; CHECK-NEXT: [[TMP2:%.*]] = fdiv <4 x double> [[TMP1]], [[TMP1]]
240241
; CHECK-NEXT: [[TMP3:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> poison, <2 x double> zeroinitializer, i64 0)
241242
; CHECK-NEXT: [[TMP4:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP3]], <2 x double> zeroinitializer, i64 2)
242243
; CHECK-NEXT: [[TMP5:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP4]], <2 x double> zeroinitializer, i64 4)
243244
; CHECK-NEXT: [[TMP6:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP5]], <2 x double> zeroinitializer, i64 6)
244245
; CHECK-NEXT: [[TMP7:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> poison, <2 x double> zeroinitializer, i64 2)
245246
; CHECK-NEXT: [[TMP8:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP7]], <2 x double> zeroinitializer, i64 6)
246-
; CHECK-NEXT: [[TMP9:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP8]], <2 x double> [[DIV0]], i64 0)
247-
; CHECK-NEXT: [[TMP10:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP9]], <2 x double> [[DIV1]], i64 4)
247+
; CHECK-NEXT: [[TMP9:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v4f64(<8 x double> poison, <4 x double> [[TMP2]], i64 0)
248+
; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <8 x double> [[TMP9]], <8 x double> [[TMP8]], <8 x i32> <i32 0, i32 1, i32 10, i32 11, i32 2, i32 3, i32 14, i32 15>
248249
; CHECK-NEXT: [[TMP11:%.*]] = fadd <8 x double> [[TMP6]], [[TMP10]]
249250
; CHECK-NEXT: br label [[FOR_END47:%.*]]
250251
; CHECK: for.end47:

0 commit comments

Comments
 (0)