diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -81,7 +81,7 @@ VectorType *ET = dyn_cast(Op1->getType()); if (!ET) return "selected values for vector select must be vectors"; - if (ET->getNumElements() != VT->getNumElements()) + if (ET->getElementCount() != VT->getElementCount()) return "vector select requires selected vectors to have " "the same vector length as select condition"; } else if (Op0->getType() != Type::getInt1Ty(Op0->getContext())) { diff --git a/llvm/test/CodeGen/AArch64/sve-bad-select.ll b/llvm/test/CodeGen/AArch64/sve-bad-select.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/sve-bad-select.ll @@ -0,0 +1,10 @@ +; RUN: not llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s 2>&1 | FileCheck %s + +define @badsel1_nxv16i8(<16 x i1> %p, + %dst, + %a) { + %sel = select <16 x i1> %p, %a, %dst + ret %sel +} + +; CHECK: error: vector select requires selected vectors to have the same vector length as select condition