13#ifndef FORTRAN_LOWER_CUDA_H
14#define FORTRAN_LOWER_CUDA_H
16#include "flang/Optimizer/Builder/FIRBuilder.h"
17#include "flang/Optimizer/Builder/MutableBox.h"
18#include "flang/Optimizer/Dialect/CUF/CUFOps.h"
19#include "flang/Runtime/allocator-registry-consts.h"
20#include "flang/Semantics/tools.h"
21#include "mlir/Dialect/Func/IR/FuncOps.h"
22#include "mlir/Dialect/OpenACC/OpenACC.h"
34static inline unsigned getAllocatorIdx(
const Fortran::semantics::Symbol &sym) {
35 std::optional<Fortran::common::CUDADataAttr> cudaAttr =
36 Fortran::semantics::GetCUDADataAttr(&sym.GetUltimate());
38 if (*cudaAttr == Fortran::common::CUDADataAttr::Pinned)
39 return kPinnedAllocatorPos;
40 if (*cudaAttr == Fortran::common::CUDADataAttr::Device)
41 return kDeviceAllocatorPos;
42 if (*cudaAttr == Fortran::common::CUDADataAttr::Managed)
43 return kManagedAllocatorPos;
44 if (*cudaAttr == Fortran::common::CUDADataAttr::Unified)
45 return kUnifiedAllocatorPos;
47 return kDefaultAllocator;
50mlir::Type gatherDeviceComponentCoordinatesAndType(
51 fir::FirOpBuilder &builder, mlir::Location loc,
52 const Fortran::semantics::Symbol &sym, fir::RecordType recTy,
53 llvm::SmallVector<mlir::Value> &coordinates);
59 const Fortran::semantics::Symbol &sym);
61bool isTransferWithConversion(mlir::Value rhs);
Definition AbstractConverter.h:85
Definition ParserActions.h:24
cuf::DataAttributeAttr translateSymbolCUFDataAttribute(mlir::MLIRContext *mlirContext, const Fortran::semantics::Symbol &sym)
Definition CUDA.cpp:64
Definition AbstractConverter.h:29