[llvm] [IR][IntrinsicInst] Add VPBinOpIntrinsic (PR #66132)
Michael Maitland via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 13 05:32:43 PDT 2023
https://github.com/michaelmaitland updated https://github.com/llvm/llvm-project/pull/66132:
>From c9e0d701cdc843b2eb34c4d00669d5a641088a73 Mon Sep 17 00:00:00 2001
From: Michael Maitland <michaeltmaitland at gmail.com>
Date: Tue, 12 Sep 2023 12:41:03 -0700
Subject: [PATCH] [IR][IntrinsicInst] Add VPBinOpIntrinsic
VPIntrinsics with VP_PROPERTY_BINARYOP property should have the ability
to be queried with with VPBinOpIntrinsic::isVPBinOp, similiar to how
intrinsics with the VP_PROPERTY_REDUCTION property can be queried with
VPReductionIntrinsic::isVPReduction.
This will be used in #65706. In that PR the usage of this class is
tested.
---
llvm/include/llvm/IR/IntrinsicInst.h | 16 ++++++++++++++++
llvm/lib/IR/IntrinsicInst.cpp | 12 ++++++++++++
2 files changed, 28 insertions(+)
diff --git a/llvm/include/llvm/IR/IntrinsicInst.h b/llvm/include/llvm/IR/IntrinsicInst.h
index 62bd833198f022b..faab11a79784225 100644
--- a/llvm/include/llvm/IR/IntrinsicInst.h
+++ b/llvm/include/llvm/IR/IntrinsicInst.h
@@ -663,6 +663,22 @@ class VPCmpIntrinsic : public VPIntrinsic {
/// @}
};
+class VPBinOpIntrinsic : public VPIntrinsic {
+public:
+ static bool isVPBinOp(Intrinsic::ID ID);
+
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
+ /// @{
+ static bool classof(const IntrinsicInst *I) {
+ return VPBinOpIntrinsic::isVPBinOp(I->getIntrinsicID());
+ }
+ static bool classof(const Value *V) {
+ return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
+ }
+ /// @}
+};
+
+
/// This is the common base class for constrained floating point intrinsics.
class ConstrainedFPIntrinsic : public IntrinsicInst {
public:
diff --git a/llvm/lib/IR/IntrinsicInst.cpp b/llvm/lib/IR/IntrinsicInst.cpp
index 61be167ebaa28db..31cd6af17b7ec80 100644
--- a/llvm/lib/IR/IntrinsicInst.cpp
+++ b/llvm/lib/IR/IntrinsicInst.cpp
@@ -694,6 +694,18 @@ bool VPCmpIntrinsic::isVPCmp(Intrinsic::ID ID) {
return false;
}
+bool VPBinOpIntrinsic::isVPBinOp(Intrinsic::ID ID) {
+ switch (ID) {
+ default:
+ break;
+#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
+#define VP_PROPERTY_BINARYOP return true;
+#define END_REGISTER_VP_INTRINSIC(VPID) break;
+#include "llvm/IR/VPIntrinsics.def"
+ }
+ return false;
+}
+
static ICmpInst::Predicate getIntPredicateFromMD(const Value *Op) {
Metadata *MD = cast<MetadataAsValue>(Op)->getMetadata();
if (!MD || !isa<MDString>(MD))
More information about the llvm-commits
mailing list