13 #ifndef MLIR_DIALECT_OPENACC_OPENACC_H_
14 #define MLIR_DIALECT_OPENACC_OPENACC_H_
23 #include "mlir/Dialect/OpenACC/OpenACCOpsDialect.h.inc"
24 #include "mlir/Dialect/OpenACC/OpenACCOpsEnums.h.inc"
25 #include "mlir/Dialect/OpenACC/OpenACCOpsInterfaces.h.inc"
26 #include "mlir/Dialect/OpenACC/OpenACCTypeInterfaces.h.inc"
33 #define GET_TYPEDEF_CLASSES
34 #include "mlir/Dialect/OpenACC/OpenACCOpsTypes.h.inc"
36 #define GET_ATTRDEF_CLASSES
37 #include "mlir/Dialect/OpenACC/OpenACCOpsAttributes.h.inc"
41 #define GET_OP_CLASSES
42 #include "mlir/Dialect/OpenACC/OpenACCOps.h.inc"
44 #define ACC_DATA_ENTRY_OPS \
45 mlir::acc::CopyinOp, mlir::acc::CreateOp, mlir::acc::PresentOp, \
46 mlir::acc::NoCreateOp, mlir::acc::AttachOp, mlir::acc::DevicePtrOp, \
47 mlir::acc::GetDevicePtrOp, mlir::acc::PrivateOp, \
48 mlir::acc::FirstprivateOp, mlir::acc::UpdateDeviceOp, \
49 mlir::acc::UseDeviceOp, mlir::acc::ReductionOp, \
50 mlir::acc::DeclareDeviceResidentOp, mlir::acc::DeclareLinkOp, \
52 #define ACC_DATA_EXIT_OPS \
53 mlir::acc::CopyoutOp, mlir::acc::DeleteOp, mlir::acc::DetachOp, \
54 mlir::acc::UpdateHostOp
55 #define ACC_DATA_CLAUSE_OPS ACC_DATA_ENTRY_OPS, ACC_DATA_EXIT_OPS
56 #define ACC_COMPUTE_CONSTRUCT_OPS \
57 mlir::acc::ParallelOp, mlir::acc::KernelsOp, mlir::acc::SerialOp
58 #define ACC_COMPUTE_CONSTRUCT_AND_LOOP_OPS \
59 ACC_COMPUTE_CONSTRUCT_OPS, mlir::acc::LoopOp
60 #define ACC_DATA_CONSTRUCT_STRUCTURED_OPS \
61 mlir::acc::DataOp, mlir::acc::DeclareOp, mlir::acc::HostDataOp
62 #define ACC_DATA_CONSTRUCT_UNSTRUCTURED_OPS \
63 mlir::acc::EnterDataOp, mlir::acc::ExitDataOp, mlir::acc::UpdateOp, \
64 mlir::acc::DeclareEnterOp, mlir::acc::DeclareExitOp
65 #define ACC_DATA_CONSTRUCT_OPS \
66 ACC_DATA_CONSTRUCT_STRUCTURED_OPS, ACC_DATA_CONSTRUCT_UNSTRUCTURED_OPS
67 #define ACC_COMPUTE_AND_DATA_CONSTRUCT_OPS \
68 ACC_COMPUTE_CONSTRUCT_OPS, ACC_DATA_CONSTRUCT_OPS
69 #define ACC_COMPUTE_LOOP_AND_DATA_CONSTRUCT_OPS \
70 ACC_COMPUTE_CONSTRUCT_AND_LOOP_OPS, ACC_DATA_CONSTRUCT_OPS
140 std::optional<mlir::acc::DataClause>
163 return mlir::isa<mlir::acc::PointerLikeType>(type);
169 return mlir::isa<mlir::acc::MappableType>(type);
174 return StringLiteral(
"acc.declare");
178 return StringLiteral(
"acc.declare_action");
182 return StringLiteral(
"acc.routine_info");
186 return CombinedConstructsTypeAttr::name;
191 mlir::StringRef
getName() final {
return "AccRuntimeCounters"; }
196 mlir::StringRef
getName() final {
return "AccConstructResource"; }
201 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.
This class contains a list of basic blocks and a link to the parent operation it is attached to.
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...
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.
mlir::TypedValue< mlir::acc::PointerLikeType > getAccPtr(mlir::Operation *accDataClauseOp)
Used to obtain the accVar from a data clause operation if it implements PointerLikeType.
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.
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()
mlir::Operation * getEnclosingComputeOp(mlir::Region ®ion)
Used to obtain the enclosing compute construct operation that contains the provided region.
bool getImplicitFlag(mlir::Operation *accDataEntryOp)
Used to find out whether data operation is implicit.
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.
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.