13#ifndef MLIR_DIALECT_OPENACC_OPENACC_H_
14#define MLIR_DIALECT_OPENACC_OPENACC_H_
24#include "mlir/Dialect/OpenACC/OpenACCOpsDialect.h.inc"
25#include "mlir/Dialect/OpenACC/OpenACCOpsEnums.h.inc"
26#include "mlir/Dialect/OpenACC/OpenACCOpsInterfaces.h.inc"
27#include "mlir/Dialect/OpenACC/OpenACCTypeInterfaces.h.inc"
35#define GET_TYPEDEF_CLASSES
36#include "mlir/Dialect/OpenACC/OpenACCOpsTypes.h.inc"
38#define GET_ATTRDEF_CLASSES
39#include "mlir/Dialect/OpenACC/OpenACCOpsAttributes.h.inc"
44#include "mlir/Dialect/OpenACC/OpenACCOps.h.inc"
46#define ACC_DATA_ENTRY_OPS \
47 mlir::acc::CopyinOp, mlir::acc::CreateOp, mlir::acc::PresentOp, \
48 mlir::acc::NoCreateOp, mlir::acc::AttachOp, mlir::acc::DevicePtrOp, \
49 mlir::acc::GetDevicePtrOp, mlir::acc::PrivateOp, \
50 mlir::acc::FirstprivateOp, mlir::acc::FirstprivateMapInitialOp, \
51 mlir::acc::UpdateDeviceOp, mlir::acc::UseDeviceOp, \
52 mlir::acc::ReductionOp, mlir::acc::DeclareDeviceResidentOp, \
53 mlir::acc::DeclareLinkOp, mlir::acc::CacheOp
54#define ACC_DATA_EXIT_OPS \
55 mlir::acc::CopyoutOp, mlir::acc::DeleteOp, mlir::acc::DetachOp, \
56 mlir::acc::UpdateHostOp
57#define ACC_DATA_CLAUSE_OPS ACC_DATA_ENTRY_OPS, ACC_DATA_EXIT_OPS
58#define ACC_COMPUTE_CONSTRUCT_OPS \
59 mlir::acc::ParallelOp, mlir::acc::KernelsOp, mlir::acc::SerialOp
60#define ACC_COMPUTE_CONSTRUCT_AND_LOOP_OPS \
61 ACC_COMPUTE_CONSTRUCT_OPS, mlir::acc::LoopOp
62#define ACC_DATA_CONSTRUCT_STRUCTURED_OPS \
63 mlir::acc::DataOp, mlir::acc::DeclareOp, mlir::acc::HostDataOp
64#define ACC_DATA_CONSTRUCT_UNSTRUCTURED_OPS \
65 mlir::acc::EnterDataOp, mlir::acc::ExitDataOp, mlir::acc::UpdateOp, \
66 mlir::acc::DeclareEnterOp, mlir::acc::DeclareExitOp
67#define ACC_DATA_CONSTRUCT_OPS \
68 ACC_DATA_CONSTRUCT_STRUCTURED_OPS, ACC_DATA_CONSTRUCT_UNSTRUCTURED_OPS
69#define ACC_COMPUTE_AND_DATA_CONSTRUCT_OPS \
70 ACC_COMPUTE_CONSTRUCT_OPS, ACC_DATA_CONSTRUCT_OPS
71#define ACC_COMPUTE_LOOP_AND_DATA_CONSTRUCT_OPS \
72 ACC_COMPUTE_CONSTRUCT_AND_LOOP_OPS, ACC_DATA_CONSTRUCT_OPS
142std::optional<mlir::acc::DataClause>
162 return mlir::isa<mlir::acc::PointerLikeType>(type);
168 return mlir::isa<mlir::acc::MappableType>(type);
173 return StringLiteral(
"acc.declare");
177 return StringLiteral(
"acc.declare_action");
181 return RoutineInfoAttr::name;
185 return SpecializedRoutineAttr::name;
201 return StringLiteral(
"acc.from_default");
205 return VarNameAttr::name;
209 return CombinedConstructsTypeAttr::name;
214 mlir::StringRef
getName() final {
return "AccRuntimeCounters"; }
219 mlir::StringRef
getName() final {
return "AccConstructResource"; }
224 mlir::StringRef
getName() final {
return "AccCurrentDeviceIdResource"; }
This class provides a mutable adaptor for a range of operands.
Operation is the basic unit of execution within MLIR.
bool hasAttr(StringAttr name)
Return true if the operation has an attribute with the provided name, false otherwise.
This base class is used for derived effects that are non-parametric.
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
This class provides an abstraction over the different types of ranges over Values.
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
static constexpr StringLiteral getFromDefaultClauseAttrName()
mlir::Value getAccVar(mlir::Operation *accDataClauseOp)
Used to obtain the accVar from a data clause operation.
mlir::Value getVar(mlir::Operation *accDataClauseOp)
Used to obtain the var from a data clause operation.
bool isAccRoutine(mlir::Operation *op)
Used to check whether the current operation is marked with acc routine.
mlir::TypedValue< mlir::acc::PointerLikeType > getAccPtr(mlir::Operation *accDataClauseOp)
Used to obtain the accVar from a data clause operation if it implements PointerLikeType.
static constexpr StringLiteral getSpecializedRoutineAttrName()
std::optional< mlir::acc::DataClause > getDataClause(mlir::Operation *accDataEntryOp)
Used to obtain the dataClause from a data entry operation.
bool isPointerLikeType(mlir::Type type)
Used to check whether the provided type implements the PointerLikeType interface.
mlir::MutableOperandRange getMutableDataOperands(mlir::Operation *accOp)
Used to get a mutable range iterating over the data operands.
mlir::SmallVector< mlir::Value > getBounds(mlir::Operation *accDataClauseOp)
Used to obtain bounds from an acc data clause operation.
OpenACCExecMapping
Enumeration used to encode the execution mapping on a loop construct.
bool isSpecializedAccRoutine(mlir::Operation *op)
Used to check whether this is a specialized accelerator version of acc routine function.
mlir::ValueRange getDataOperands(mlir::Operation *accOp)
Used to get an immutable range iterating over the data operands.
std::optional< llvm::StringRef > getVarName(mlir::Operation *accOp)
Used to obtain the name from an acc operation.
static constexpr StringLiteral getRoutineInfoAttrName()
bool getImplicitFlag(mlir::Operation *accDataEntryOp)
Used to find out whether data operation is implicit.
mlir::SymbolRefAttr getRecipe(mlir::Operation *accOp)
Used to get the recipe attribute from a data clause operation.
mlir::SmallVector< mlir::Value > getAsyncOperands(mlir::Operation *accDataClauseOp)
Used to obtain async operands from an acc data clause operation.
bool isMappableType(mlir::Type type)
Used to check whether the provided type implements the MappableType interface.
static constexpr StringLiteral getCombinedConstructsAttrName()
mlir::Value getVarPtrPtr(mlir::Operation *accDataClauseOp)
Used to obtain the varPtrPtr from a data clause operation.
static constexpr StringLiteral getVarNameAttrName()
mlir::ArrayAttr getAsyncOnly(mlir::Operation *accDataClauseOp)
Returns an array of acc:DeviceTypeAttr attributes attached to an acc data clause operation,...
static constexpr StringLiteral getDeclareAttrName()
Used to obtain the attribute name for declare.
static constexpr StringLiteral getDeclareActionAttrName()
mlir::Type getVarType(mlir::Operation *accDataClauseOp)
Used to obtains the varType from a data clause operation which records the type of variable.
mlir::TypedValue< mlir::acc::PointerLikeType > getVarPtr(mlir::Operation *accDataClauseOp)
Used to obtain the var from a data clause operation if it implements PointerLikeType.
mlir::ArrayAttr getAsyncOperandsDeviceType(mlir::Operation *accDataClauseOp)
Returns an array of acc:DeviceTypeAttr attributes attached to an acc data clause operation,...
Include the generated interface declarations.
std::conditional_t< std::is_same_v< Ty, mlir::Type >, mlir::Value, detail::TypedValue< Ty > > TypedValue
If Ty is mlir::Type this will select Value instead of having a wrapper around it.
mlir::StringRef getName() final
Return a string name of the resource.
mlir::StringRef getName() final
Return a string name of the resource.
mlir::StringRef getName() final
Return a string name of the resource.