Hey list,
I don’t have bugzilla (reasons - incidentally is there anyone working on a more sane way to report bugs yet?).
Between LLVM 13 rc2 and trunk I’ve got some new fun fail in the SLP vectorizer. I’ll attach the repro below (I could repro it with opt --slp-vectorizer test.ll) - fails with:
Assertion failed: !isa(I) && !isVectorLikeInstWithConstOps(I) && "phi nodes/insertelements/extractelements/extractvalues don’t need to " “be scheduled”, file …\lib\Transforms\Vectorize\SLPVectorizer.cpp, line 6096
Anyone know what has changed in the short time from 13 → trunk that’d cause this?
define void @test([4 x float]* nocapture %o, [2 x float]* nocapture nonnull readonly dereferenceable(8) %a, [2 x float]* nocapture nonnull readonly dereferenceable(8) %b, i32 signext %component) {
entry:
%0 = bitcast [2 x float]* %a to <2 x float>*
%1 = load <2 x float>, <2 x float>* %0, align 1
%2 = bitcast [2 x float]* %b to <2 x float>*
%3 = load <2 x float>, <2 x float>* %2, align 1
%4 = trunc i32 %component to i8
%5 = shufflevector <2 x float> %1, <2 x float> %3, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 2, i32 3, i32 undef, i32 undef>
%6 = extractelement <8 x float> %5, i8 %4
%7 = insertelement <4 x float> undef, float %6, i64 0
%8 = extractelement <2 x float> %3, i32 1
%9 = insertelement <4 x float> %7, float %8, i64 1
%10 = extractelement <2 x float> %1, i32 1
%11 = insertelement <4 x float> %9, float %10, i64 2
%12 = insertelement <4 x float> %11, float %6, i64 3
%13 = bitcast [4 x float]* %o to <4 x float>*
store <4 x float> %12, <4 x float>* %13, align 1
ret void
}
Thanks for any help,
-Neil.