diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -9760,7 +9760,7 @@ Mask[I] = Entries.front()->findLaneForValue(V); } ShuffleBuilder.add(Entries.front()->VectorizedValue, Mask); - Res = ShuffleBuilder.finalize(E->ReuseShuffleIndices); + Res = ShuffleBuilder.finalize(std::nullopt); return Res; } if (!Resized) { diff --git a/llvm/test/Transforms/SLPVectorizer/X86/shufflebuilder-bug.ll b/llvm/test/Transforms/SLPVectorizer/X86/shufflebuilder-bug.ll --- a/llvm/test/Transforms/SLPVectorizer/X86/shufflebuilder-bug.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/shufflebuilder-bug.ll @@ -10,9 +10,8 @@ ; CHECK-NEXT: [[TMP3:%.*]] = insertelement <2 x float> [[TMP2]], float [[VAL]], i32 1 ; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <2 x float> [[TMP3]], <2 x float> poison, <4 x i32> ; CHECK-NEXT: [[TMP5:%.*]] = fadd <4 x float> [[TMP1]], [[TMP4]] -; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <2 x float> [[TMP3]], <2 x float> poison, <4 x i32> zeroinitializer -; CHECK-NEXT: [[TMP7:%.*]] = fmul <4 x float> [[TMP5]], [[TMP6]] -; CHECK-NEXT: store <4 x float> [[TMP7]], ptr [[GEP0]], align 4 +; CHECK-NEXT: [[TMP6:%.*]] = fmul <4 x float> [[TMP5]], [[TMP4]] +; CHECK-NEXT: store <4 x float> [[TMP6]], ptr [[GEP0]], align 4 ; CHECK-NEXT: ret void ; %vec_3 = extractelement <4 x float> %vec, i32 3