[flang-commits] [flang] [flang][cuda] Add utility function cuf::hasDataAttr (PR #154422)

Valentin Clement バレンタイン クレメン via flang-commits flang-commits at lists.llvm.org
Tue Aug 19 14:05:51 PDT 2025


https://github.com/clementval created https://github.com/llvm/llvm-project/pull/154422

None

>From 99a6f5057ce34481a55cd71646f72dbffe5120f7 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Tue, 19 Aug 2025 14:02:48 -0700
Subject: [PATCH] [flang][cuda] Add utility function cuf::hasDataAttr

---
 .../Optimizer/Dialect/CUF/Attributes/CUFAttr.h   |  8 ++++++++
 .../Optimizer/Dialect/CUF/Attributes/CUFAttr.cpp | 16 ++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/flang/include/flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h b/flang/include/flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h
index 85615a4d69157..1183fc1299810 100644
--- a/flang/include/flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h
+++ b/flang/include/flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h
@@ -20,6 +20,10 @@ namespace llvm {
 class StringRef;
 }
 
+namespace mlir {
+class Operation;
+}
+
 #include "flang/Optimizer/Dialect/CUF/Attributes/CUFEnumAttr.h.inc"
 
 #define GET_ATTRDEF_CLASSES
@@ -28,6 +32,7 @@ class StringRef;
 namespace cuf {
 
 /// Attribute to mark Fortran entities with the CUDA attribute.
+static constexpr llvm::StringRef dataAttrName = "data_attr";
 static constexpr llvm::StringRef getDataAttrName() { return "cuf.data_attr"; }
 static constexpr llvm::StringRef getProcAttrName() { return "cuf.proc_attr"; }
 
@@ -101,6 +106,9 @@ getProcAttribute(mlir::MLIRContext *mlirContext,
   return {};
 }
 
+/// Returns true if the operation has a data attribute with the given value.
+bool hasDataAttr(mlir::Operation *op);
+
 } // namespace cuf
 
 #endif // FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
diff --git a/flang/lib/Optimizer/Dialect/CUF/Attributes/CUFAttr.cpp b/flang/lib/Optimizer/Dialect/CUF/Attributes/CUFAttr.cpp
index 52c733dcad6f0..9314c46a3bdf7 100644
--- a/flang/lib/Optimizer/Dialect/CUF/Attributes/CUFAttr.cpp
+++ b/flang/lib/Optimizer/Dialect/CUF/Attributes/CUFAttr.cpp
@@ -16,6 +16,7 @@
 #include "mlir/IR/BuiltinTypes.h"
 #include "mlir/IR/DialectImplementation.h"
 #include "mlir/IR/OpDefinition.h"
+#include "mlir/IR/Operation.h"
 #include "llvm/ADT/TypeSwitch.h"
 
 #include "flang/Optimizer/Dialect/CUF/Attributes/CUFEnumAttr.cpp.inc"
@@ -29,4 +30,19 @@ void CUFDialect::registerAttributes() {
                 LaunchBoundsAttr, ProcAttributeAttr>();
 }
 
+bool hasDataAttr(mlir::Operation *op, cuf::DataAttribute value) {
+  if (!op)
+    return false;
+
+  cuf::DataAttributeAttr dataAttr =
+      op->getAttrOfType<cuf::DataAttributeAttr>(cuf::getDataAttrName());
+  // When the attribute is declared on the operation, it doesn't have a prefix.
+  if (!dataAttr)
+    dataAttr = op->getAttrOfType<cuf::DataAttributeAttr>(cuf::dataAttrName);
+  if (!dataAttr)
+    return false;
+
+  return dataAttr.getValue() == value;
+}
+
 } // namespace cuf



More information about the flang-commits mailing list