huihuiz added inline comments.
================ Comment at: llvm/lib/CodeGen/CodeGenPrepare.cpp:6542 - unsigned End = getTransitionType()->getVectorNumElements(); + auto EC = getTransitionType()->getVectorElementCount(); if (UseSplat) ---------------- efriedma wrote: > Please write out the type ElementCount. > > This is unfortunately turning the explicit assertion if the type is scalable > into a later verifier failure in the case where it isn't a splat. Please > either fix it properly, or change it so the non-splat codepath still asserts. Good catch! Thanks Eli! Going with assert for non-splat codepath for scalable vector. We should implement like: ``` UndefValue *UndefVal = UndefValue::get(getTransitionType()); Type *I32Ty = Type::getInt32Ty(getTransitionType()->getContext()); return ConstantExpr::getInsertElement(UndefVal, Val, ConstantInt::get(I32Ty, ExtractIdx)); ``` But current target lowering will reject scalable vector earlier while checking isTypeLegal(EVT VT). I am adding a test to check this. So we get assert once target lowering is ready. Then I can bring in this implementation and check for its correctness. ``` define void @simpleOneInstructionPromotion(<vscale x 2 x i32>* %addr1, i32* %dest) { %in1 = load <vscale x 2 x i32>, <vscale x 2 x i32>* %addr1, align 8 %extract = extractelement <vscale x 2 x i32> %in1, i32 1 %out = or i32 %extract, 1 store i32 %out, i32* %dest, align 4 ret void } ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74386/new/ https://reviews.llvm.org/D74386 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits