FLANG
FIROpenACCTypeInterfaces.h
1//===- FIROpenACCTypeInterfaces.h -------------------------------*- C++ -*-===//
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// This file contains external dialect interfaces for FIR.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef FLANG_OPTIMIZER_OPENACC_FIROPENACCTYPEINTERFACES_H_
14#define FLANG_OPTIMIZER_OPENACC_FIROPENACCTYPEINTERFACES_H_
15
16#include "flang/Optimizer/Dialect/FIRType.h"
17#include "mlir/Dialect/OpenACC/OpenACC.h"
18
19namespace fir::acc {
20
21template <typename T>
23 : public mlir::acc::PointerLikeType::ExternalModel<
24 OpenACCPointerLikeModel<T>, T> {
25 mlir::Type getElementType(mlir::Type pointer) const {
26 return mlir::cast<T>(pointer).getElementType();
27 }
28 mlir::acc::VariableTypeCategory
29 getPointeeTypeCategory(mlir::Type pointer,
30 mlir::TypedValue<mlir::acc::PointerLikeType> varPtr,
31 mlir::Type varType) const;
32};
33
34template <typename T>
36 : public mlir::acc::MappableType::ExternalModel<OpenACCMappableModel<T>,
37 T> {
38 mlir::TypedValue<mlir::acc::PointerLikeType> getVarPtr(::mlir::Type type,
39 mlir::Value var) const;
40
41 std::optional<llvm::TypeSize>
42 getSizeInBytes(mlir::Type type, mlir::Value var, mlir::ValueRange accBounds,
43 const mlir::DataLayout &dataLayout) const;
44
45 std::optional<int64_t>
46 getOffsetInBytes(mlir::Type type, mlir::Value var, mlir::ValueRange accBounds,
47 const mlir::DataLayout &dataLayout) const;
48
50 generateAccBounds(mlir::Type type, mlir::Value var,
51 mlir::OpBuilder &builder) const;
52
53 mlir::acc::VariableTypeCategory getTypeCategory(mlir::Type type,
54 mlir::Value var) const;
55
56 mlir::Value generatePrivateInit(mlir::Type type, mlir::OpBuilder &builder,
57 mlir::Location loc,
58 mlir::TypedValue<mlir::acc::MappableType> var,
59 llvm::StringRef varName,
60 mlir::ValueRange extents,
61 mlir::Value initVal) const;
62};
63
64} // namespace fir::acc
65
66#endif // FLANG_OPTIMIZER_OPENACC_FIROPENACCTYPEINTERFACES_H_
Definition OpenACC.h:20
Definition FIROpenACCTypeInterfaces.h:37
Definition FIROpenACCTypeInterfaces.h:24