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/Common/Fortran.h"
17#include "mlir/IR/BuiltinAttributes.h"
18
19namespace llvm {
20class StringRef;
21}
22
23#include "flang/Optimizer/Dialect/CUF/Attributes/CUFEnumAttr.h.inc"
24
25#define GET_ATTRDEF_CLASSES
26#include "flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h.inc"
27
28namespace cuf {
29
31static constexpr llvm::StringRef getDataAttrName() { return "cuf.data_attr"; }
32static constexpr llvm::StringRef getProcAttrName() { return "cuf.proc_attr"; }
33
35static constexpr llvm::StringRef getLaunchBoundsAttrName() {
36 return "cuf.launch_bounds";
37}
38
40static constexpr llvm::StringRef getClusterDimsAttrName() {
41 return "cuf.cluster_dims";
42}
43
44inline cuf::DataAttributeAttr
45getDataAttribute(mlir::MLIRContext *mlirContext,
46 std::optional<Fortran::common::CUDADataAttr> cudaAttr) {
47 if (cudaAttr) {
48 cuf::DataAttribute attr;
49 switch (*cudaAttr) {
50 case Fortran::common::CUDADataAttr::Constant:
51 attr = cuf::DataAttribute::Constant;
52 break;
53 case Fortran::common::CUDADataAttr::Device:
54 attr = cuf::DataAttribute::Device;
55 break;
56 case Fortran::common::CUDADataAttr::Managed:
57 attr = cuf::DataAttribute::Managed;
58 break;
59 case Fortran::common::CUDADataAttr::Pinned:
60 attr = cuf::DataAttribute::Pinned;
61 break;
62 case Fortran::common::CUDADataAttr::Shared:
63 attr = cuf::DataAttribute::Shared;
64 break;
65 case Fortran::common::CUDADataAttr::Texture:
66 // Obsolete attribute
67 return {};
68 case Fortran::common::CUDADataAttr::Unified:
69 attr = cuf::DataAttribute::Unified;
70 break;
71 }
72 return cuf::DataAttributeAttr::get(mlirContext, attr);
73 }
74 return {};
75}
76
77inline cuf::ProcAttributeAttr
78getProcAttribute(mlir::MLIRContext *mlirContext,
79 std::optional<Fortran::common::CUDASubprogramAttrs> cudaAttr) {
80 if (cudaAttr) {
81 cuf::ProcAttribute attr;
82 switch (*cudaAttr) {
83 case Fortran::common::CUDASubprogramAttrs::Host:
84 attr = cuf::ProcAttribute::Host;
85 break;
86 case Fortran::common::CUDASubprogramAttrs::Device:
87 attr = cuf::ProcAttribute::Device;
88 break;
89 case Fortran::common::CUDASubprogramAttrs::HostDevice:
90 attr = cuf::ProcAttribute::HostDevice;
91 break;
92 case Fortran::common::CUDASubprogramAttrs::Global:
93 attr = cuf::ProcAttribute::Global;
94 break;
95 case Fortran::common::CUDASubprogramAttrs::Grid_Global:
96 attr = cuf::ProcAttribute::GridGlobal;
97 break;
98 }
99 return cuf::ProcAttributeAttr::get(mlirContext, attr);
100 }
101 return {};
102}
103
104} // namespace cuf
105
106#endif // FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
Definition: ConvertVariable.h:26