[llvm] [AArch64] Add @llvm.experimental.vector.match (PR #101974)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 30 11:16:57 PDT 2024
================
@@ -6154,6 +6154,29 @@ void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) {
&Call);
break;
}
+ case Intrinsic::experimental_vector_match: {
+ Value *Op1 = Call.getArgOperand(0);
+ Value *Op2 = Call.getArgOperand(1);
+ Value *Mask = Call.getArgOperand(2);
+
+ VectorType *Op1Ty = dyn_cast<VectorType>(Op1->getType());
+ VectorType *Op2Ty = dyn_cast<VectorType>(Op2->getType());
+ VectorType *MaskTy = dyn_cast<VectorType>(Mask->getType());
+
+ Check(Op1Ty && Op2Ty && MaskTy, "Operands must be vectors.", &Call);
+ Check(!isa<ScalableVectorType>(Op2Ty), "Second operand cannot be scalable.",
+ &Call);
+ Check(Op1Ty->getElementType() == Op2Ty->getElementType(),
+ "First two operands must have the same element type.", &Call);
+ Check(Op1Ty->getElementCount() == MaskTy->getElementCount(),
+ "First operand and mask must have the same number of elements.",
+ &Call);
+ Check(MaskTy->getElementType()->isIntegerTy(1),
+ "Mask must be a vector of i1's.", &Call);
+ Check(Call.getType() == MaskTy, "Return type must match the mask type.",
+ &Call);
+ break;
----------------
paulwalker-arm wrote:
Assuming you agree with my LangRef, you'll need to verify the element types for the non-mask operands as well.
https://github.com/llvm/llvm-project/pull/101974
More information about the llvm-commits
mailing list