FLANG
CUFAttr.h
1//===-- Optimizer/Dialect/CUF/Attributes/CUFAttr.h -- CUF attributes ------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
14#define FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
15
16#include "flang/Support/Fortran.h"
17#include "mlir/IR/BuiltinAttributes.h"
18
19namespace llvm {
20class StringRef;
21}
22
23namespace mlir {
24class Operation;
25}
26
27#include "flang/Optimizer/Dialect/CUF/Attributes/CUFEnumAttr.h.inc"
28
29#define GET_ATTRDEF_CLASSES
30#include "flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h.inc"
31
32namespace cuf {
33
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"; }
38
40static constexpr llvm::StringRef getLaunchBoundsAttrName() {
41 return "cuf.launch_bounds";
42}
43
45static constexpr llvm::StringRef getClusterDimsAttrName() {
46 return "cuf.cluster_dims";
47}
48
49inline cuf::DataAttributeAttr
50getDataAttribute(mlir::MLIRContext *mlirContext,
51 std::optional<Fortran::common::CUDADataAttr> cudaAttr) {
52 if (cudaAttr) {
53 cuf::DataAttribute attr;
54 switch (*cudaAttr) {
55 case Fortran::common::CUDADataAttr::Constant:
56 attr = cuf::DataAttribute::Constant;
57 break;
58 case Fortran::common::CUDADataAttr::Device:
59 attr = cuf::DataAttribute::Device;
60 break;
61 case Fortran::common::CUDADataAttr::Managed:
62 attr = cuf::DataAttribute::Managed;
63 break;
64 case Fortran::common::CUDADataAttr::Pinned:
65 attr = cuf::DataAttribute::Pinned;
66 break;
67 case Fortran::common::CUDADataAttr::Shared:
68 attr = cuf::DataAttribute::Shared;
69 break;
70 case Fortran::common::CUDADataAttr::Texture:
71 // Obsolete attribute
72 return {};
73 case Fortran::common::CUDADataAttr::Unified:
74 attr = cuf::DataAttribute::Unified;
75 break;
76 case Fortran::common::CUDADataAttr::UseDevice:
77 attr = cuf::DataAttribute::Device;
78 break;
79 case Fortran::common::CUDADataAttr::Value:
80 return {}; // Extension, not a real CUDA Fortran data attribute
81 }
82 return cuf::DataAttributeAttr::get(mlirContext, attr);
83 }
84 return {};
85}
86
87inline cuf::ProcAttributeAttr
88getProcAttribute(mlir::MLIRContext *mlirContext,
89 std::optional<Fortran::common::CUDASubprogramAttrs> cudaAttr) {
90 if (cudaAttr) {
91 cuf::ProcAttribute attr;
92 switch (*cudaAttr) {
93 case Fortran::common::CUDASubprogramAttrs::Host:
94 attr = cuf::ProcAttribute::Host;
95 break;
96 case Fortran::common::CUDASubprogramAttrs::Device:
97 attr = cuf::ProcAttribute::Device;
98 break;
99 case Fortran::common::CUDASubprogramAttrs::HostDevice:
100 attr = cuf::ProcAttribute::HostDevice;
101 break;
102 case Fortran::common::CUDASubprogramAttrs::Global:
103 attr = cuf::ProcAttribute::Global;
104 break;
105 case Fortran::common::CUDASubprogramAttrs::Grid_Global:
106 attr = cuf::ProcAttribute::GridGlobal;
107 break;
108 }
109 return cuf::ProcAttributeAttr::get(mlirContext, attr);
110 }
111 return {};
112}
113
115cuf::DataAttributeAttr getDataAttr(mlir::Operation *op);
116
118bool hasDataAttr(mlir::Operation *op, cuf::DataAttribute value);
119
122bool isDeviceDataAttribute(cuf::DataAttribute attr);
123
126bool hasDeviceDataAttr(mlir::Operation *op);
127
128} // namespace cuf
129
130#endif // FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
Definition ConvertVariable.h:28
cuf::DataAttributeAttr getDataAttr(mlir::Operation *op)
Returns the data attribute if the operation has one.
Definition CUFAttr.cpp:33
bool hasDeviceDataAttr(mlir::Operation *op)
Definition CUFAttr.cpp:63
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
bool isDeviceDataAttribute(cuf::DataAttribute attr)
Definition CUFAttr.cpp:55
Definition AbstractConverter.h:32