13#ifndef FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
14#define FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
16#include "flang/Support/Fortran.h"
17#include "mlir/IR/BuiltinAttributes.h"
27#include "flang/Optimizer/Dialect/CUF/Attributes/CUFEnumAttr.h.inc"
29#define GET_ATTRDEF_CLASSES
30#include "flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h.inc"
35static constexpr llvm::StringRef dataAttrName =
"data_attr";
36static constexpr llvm::StringRef getDataAttrName() {
return "cuf.data_attr"; }
37static constexpr llvm::StringRef getProcAttrName() {
return "cuf.proc_attr"; }
40static constexpr llvm::StringRef getLaunchBoundsAttrName() {
41 return "cuf.launch_bounds";
45static constexpr llvm::StringRef getClusterDimsAttrName() {
46 return "cuf.cluster_dims";
49inline cuf::DataAttributeAttr
50getDataAttribute(mlir::MLIRContext *mlirContext,
51 std::optional<Fortran::common::CUDADataAttr> cudaAttr) {
53 cuf::DataAttribute attr;
55 case Fortran::common::CUDADataAttr::Constant:
56 attr = cuf::DataAttribute::Constant;
58 case Fortran::common::CUDADataAttr::Device:
59 attr = cuf::DataAttribute::Device;
61 case Fortran::common::CUDADataAttr::Managed:
62 attr = cuf::DataAttribute::Managed;
64 case Fortran::common::CUDADataAttr::Pinned:
65 attr = cuf::DataAttribute::Pinned;
67 case Fortran::common::CUDADataAttr::Shared:
68 attr = cuf::DataAttribute::Shared;
70 case Fortran::common::CUDADataAttr::Texture:
73 case Fortran::common::CUDADataAttr::Unified:
74 attr = cuf::DataAttribute::Unified;
77 return cuf::DataAttributeAttr::get(mlirContext, attr);
82inline cuf::ProcAttributeAttr
83getProcAttribute(mlir::MLIRContext *mlirContext,
84 std::optional<Fortran::common::CUDASubprogramAttrs> cudaAttr) {
86 cuf::ProcAttribute attr;
88 case Fortran::common::CUDASubprogramAttrs::Host:
89 attr = cuf::ProcAttribute::Host;
91 case Fortran::common::CUDASubprogramAttrs::Device:
92 attr = cuf::ProcAttribute::Device;
94 case Fortran::common::CUDASubprogramAttrs::HostDevice:
95 attr = cuf::ProcAttribute::HostDevice;
97 case Fortran::common::CUDASubprogramAttrs::Global:
98 attr = cuf::ProcAttribute::Global;
100 case Fortran::common::CUDASubprogramAttrs::Grid_Global:
101 attr = cuf::ProcAttribute::GridGlobal;
104 return cuf::ProcAttributeAttr::get(mlirContext, attr);
110cuf::DataAttributeAttr
getDataAttr(mlir::Operation *op);
113bool hasDataAttr(mlir::Operation *op, cuf::DataAttribute value);
Definition ConvertVariable.h:26
cuf::DataAttributeAttr getDataAttr(mlir::Operation *op)
Returns the data attribute if the operation has one.
Definition CUFAttr.cpp:33
bool hasDataAttr(mlir::Operation *op, cuf::DataAttribute value)
Returns true if the operation has a data attribute with the given value.
Definition CUFAttr.cpp:49
Definition AbstractConverter.h:29