[Mlir-commits] [mlir] [mlir] Simplify functions with "constexpr if" (NFC) (PR #137551)
Kazu Hirata
llvmlistbot at llvm.org
Sun Apr 27 14:41:28 PDT 2025
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/137551
We can use "constexpr if" to combine the two variants of functions.
>From 376aae6728bdeeeb8477f588b4075fdfe8c9e101 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sun, 27 Apr 2025 13:54:50 -0700
Subject: [PATCH] [mlir] Simplify functions with "constexpr if" (NFC)
We can use "constexpr if" to combine the two variants of functions.
---
mlir/include/mlir/IR/OpDefinition.h | 27 ++++++++++-----------------
mlir/include/mlir/IR/PatternMatch.h | 14 +++++---------
mlir/include/mlir/Pass/PassOptions.h | 17 +++++++----------
3 files changed, 22 insertions(+), 36 deletions(-)
diff --git a/mlir/include/mlir/IR/OpDefinition.h b/mlir/include/mlir/IR/OpDefinition.h
index 237d48756c749..31f54413a5ff0 100644
--- a/mlir/include/mlir/IR/OpDefinition.h
+++ b/mlir/include/mlir/IR/OpDefinition.h
@@ -1631,14 +1631,11 @@ using detect_has_verify_region_trait =
/// Verify the given trait if it provides a verifier.
template <typename T>
-std::enable_if_t<detect_has_verify_trait<T>::value, LogicalResult>
-verifyTrait(Operation *op) {
- return T::verifyTrait(op);
-}
-template <typename T>
-inline std::enable_if_t<!detect_has_verify_trait<T>::value, LogicalResult>
-verifyTrait(Operation *) {
- return success();
+LogicalResult verifyTrait(Operation *op) {
+ if constexpr (detect_has_verify_trait<T>::value)
+ return T::verifyTrait(op);
+ else
+ return success();
}
/// Given a set of traits, return the result of verifying the given operation.
@@ -1649,15 +1646,11 @@ LogicalResult verifyTraits(Operation *op) {
/// Verify the given trait if it provides a region verifier.
template <typename T>
-std::enable_if_t<detect_has_verify_region_trait<T>::value, LogicalResult>
-verifyRegionTrait(Operation *op) {
- return T::verifyRegionTrait(op);
-}
-template <typename T>
-inline std::enable_if_t<!detect_has_verify_region_trait<T>::value,
- LogicalResult>
-verifyRegionTrait(Operation *) {
- return success();
+LogicalResult verifyRegionTrait(Operation *op) {
+ if constexpr (detect_has_verify_region_trait<T>::value)
+ return T::verifyRegionTrait(op);
+ else
+ return success();
}
/// Given a set of traits, return the result of verifying the regions of the
diff --git a/mlir/include/mlir/IR/PatternMatch.h b/mlir/include/mlir/IR/PatternMatch.h
index fc6ae8fb55fec..10cfe851765dc 100644
--- a/mlir/include/mlir/IR/PatternMatch.h
+++ b/mlir/include/mlir/IR/PatternMatch.h
@@ -273,17 +273,13 @@ class RewritePattern : public Pattern {
template <typename T>
using detect_has_initialize = llvm::is_detected<has_initialize, T>;
- /// Initialize the derived pattern by calling its `initialize` method.
+ /// Initialize the derived pattern by calling its `initialize` method if
+ /// available.
template <typename T>
- static std::enable_if_t<detect_has_initialize<T>::value>
- initializePattern(T &pattern) {
- pattern.initialize();
+ static void initializePattern(T &pattern) {
+ if constexpr (detect_has_initialize<T>::value)
+ pattern.initialize();
}
- /// Empty derived pattern initializer for patterns that do not have an
- /// initialize method.
- template <typename T>
- static std::enable_if_t<!detect_has_initialize<T>::value>
- initializePattern(T &) {}
/// An anchor for the virtual table.
virtual void anchor();
diff --git a/mlir/include/mlir/Pass/PassOptions.h b/mlir/include/mlir/Pass/PassOptions.h
index 68588279e2f5a..e1f16c6158ad5 100644
--- a/mlir/include/mlir/Pass/PassOptions.h
+++ b/mlir/include/mlir/Pass/PassOptions.h
@@ -75,16 +75,13 @@ static void printOptionValue(raw_ostream &os, const std::string &str) {
os << "}";
}
template <typename ParserT, typename DataT>
-static std::enable_if_t<has_stream_operator<DataT>::value>
-printOptionValue(raw_ostream &os, const DataT &value) {
- os << value;
-}
-template <typename ParserT, typename DataT>
-static std::enable_if_t<!has_stream_operator<DataT>::value>
-printOptionValue(raw_ostream &os, const DataT &value) {
- // If the value can't be streamed, fallback to checking for a print in the
- // parser.
- ParserT::print(os, value);
+static void printOptionValue(raw_ostream &os, const DataT &value) {
+ if constexpr (has_stream_operator<DataT>::value)
+ os << value;
+ else
+ // If the value can't be streamed, fallback to checking for a print in the
+ // parser.
+ ParserT::print(os, value);
}
} // namespace pass_options
More information about the Mlir-commits
mailing list