[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