[llvm] 41eb82f - [VP] Add method for looking up functional intrinsic ID for VP. NFC (#66190)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 13 05:33:59 PDT 2023
Author: Luke Lau
Date: 2023-09-13T13:33:55+01:00
New Revision: 41eb82f8d12afb7bc4e43534a1a4db0e7980d630
URL: https://github.com/llvm/llvm-project/commit/41eb82f8d12afb7bc4e43534a1a4db0e7980d630
DIFF: https://github.com/llvm/llvm-project/commit/41eb82f8d12afb7bc4e43534a1a4db0e7980d630.diff
LOG: [VP] Add method for looking up functional intrinsic ID for VP. NFC (#66190)
This adds a helper method to get the ID of the functionally equivalent
intrinsic, similar to the existing getFunctionalOpcodeForVP and
getConstrainedIntrinsicIDForVP methods.
Not sure if it's notable or not, but I can't find any existing uses of
VP_PROPERTY_FUNCTIONAL_INTRINSIC?
It could potentially be used in #65706 to scalarize VP intrinsics.
Added:
Modified:
llvm/include/llvm/IR/IntrinsicInst.h
llvm/lib/IR/IntrinsicInst.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/IR/IntrinsicInst.h b/llvm/include/llvm/IR/IntrinsicInst.h
index 62bd833198f022b..338373f0338651c 100644
--- a/llvm/include/llvm/IR/IntrinsicInst.h
+++ b/llvm/include/llvm/IR/IntrinsicInst.h
@@ -596,6 +596,11 @@ class VPIntrinsic : public IntrinsicInst {
return getFunctionalOpcodeForVP(getIntrinsicID());
}
+ // Equivalent non-predicated intrinsic ID
+ std::optional<unsigned> getFunctionalIntrinsicID() const {
+ return getFunctionalIntrinsicIDForVP(getIntrinsicID());
+ }
+
// Equivalent non-predicated constrained ID
std::optional<unsigned> getConstrainedIntrinsicID() const {
return getConstrainedIntrinsicIDForVP(getIntrinsicID());
@@ -604,8 +609,12 @@ class VPIntrinsic : public IntrinsicInst {
// Equivalent non-predicated opcode
static std::optional<unsigned> getFunctionalOpcodeForVP(Intrinsic::ID ID);
+ // Equivalent non-predicated intrinsic ID
+ static std::optional<Intrinsic::ID>
+ getFunctionalIntrinsicIDForVP(Intrinsic::ID ID);
+
// Equivalent non-predicated constrained ID
- static std::optional<unsigned>
+ static std::optional<Intrinsic::ID>
getConstrainedIntrinsicIDForVP(Intrinsic::ID ID);
};
diff --git a/llvm/lib/IR/IntrinsicInst.cpp b/llvm/lib/IR/IntrinsicInst.cpp
index 61be167ebaa28db..c73634e5db06ab9 100644
--- a/llvm/lib/IR/IntrinsicInst.cpp
+++ b/llvm/lib/IR/IntrinsicInst.cpp
@@ -529,8 +529,22 @@ VPIntrinsic::getFunctionalOpcodeForVP(Intrinsic::ID ID) {
return std::nullopt;
}
+// Equivalent non-predicated intrinsic
+std::optional<Intrinsic::ID>
+VPIntrinsic::getFunctionalIntrinsicIDForVP(Intrinsic::ID ID) {
+ switch (ID) {
+ default:
+ break;
+#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
+#define VP_PROPERTY_FUNCTIONAL_INTRINSIC(INTRIN) return Intrinsic::INTRIN;
+#define END_REGISTER_VP_INTRINSIC(VPID) break;
+#include "llvm/IR/VPIntrinsics.def"
+ }
+ return std::nullopt;
+}
+
// Equivalent non-predicated constrained intrinsic
-std::optional<unsigned>
+std::optional<Intrinsic::ID>
VPIntrinsic::getConstrainedIntrinsicIDForVP(Intrinsic::ID ID) {
switch (ID) {
default:
More information about the llvm-commits
mailing list