diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp index 608727b74592..2a5e761a92aa 100644 --- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp @@ -4815,6 +4815,10 @@ InstructionCost X86TTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val, }; assert(Val->isVectorTy() && "This must be a vector type"); + auto *VT = cast(Val); + if (VT->isScalableTy()) + return InstructionCost::getInvalid(); + Type *ScalarType = Val->getScalarType(); InstructionCost RegisterFileMoveCost = 0; diff --git a/llvm/test/Analysis/CostModel/X86/vscale-insertelement-crash.ll b/llvm/test/Analysis/CostModel/X86/vscale-insertelement-crash.ll new file mode 100644 index 000000000000..77e68c582269 --- /dev/null +++ b/llvm/test/Analysis/CostModel/X86/vscale-insertelement-crash.ll @@ -0,0 +1,10 @@ +; RUN: opt -passes=print -disable-output < %s +; This test triggers a crash in X86 TTI with scalable vectors + +target triple = "x86_64-unknown-linux-gnu" + +define @test(i64 %x) { +entry: + %v = insertelement poison, i64 %x, i64 0 + ret %v +}