13#ifndef FLANG_OPTIMIZER_OPENACC_FIROPENACC_OPS_INTERFACES_H_
14#define FLANG_OPTIMIZER_OPENACC_FIROPENACC_OPS_INTERFACES_H_
16#include "flang/Optimizer/Dialect/FIROperationMoveOpInterface.h"
17#include "flang/Optimizer/Dialect/FIROps.h"
18#include "flang/Optimizer/Dialect/FortranVariableInterface.h"
19#include "mlir/Dialect/OpenACC/OpenACC.h"
36 :
public mlir::acc::PartialEntityAccessOpInterface::ExternalModel<
37 PartialEntityAccessModel<Op>, Op> {
38 mlir::Value getBaseEntity(mlir::Operation *op)
const;
41 bool isCompleteView(mlir::Operation *op)
const {
return false; }
47 :
public mlir::acc::PartialEntityAccessOpInterface::ExternalModel<
48 PartialEntityAccessModel<fir::DeclareOp>, fir::DeclareOp> {
49 mlir::Value getBaseEntity(mlir::Operation *op)
const;
50 bool isCompleteView(mlir::Operation *op)
const;
55 :
public mlir::acc::PartialEntityAccessOpInterface::ExternalModel<
56 PartialEntityAccessModel<hlfir::DeclareOp>, hlfir::DeclareOp> {
57 mlir::Value getBaseEntity(mlir::Operation *op)
const;
58 bool isCompleteView(mlir::Operation *op)
const;
62 :
public mlir::acc::AddressOfGlobalOpInterface::ExternalModel<
63 AddressOfGlobalModel, fir::AddrOfOp> {
64 mlir::SymbolRefAttr getSymbol(mlir::Operation *op)
const;
68 :
public mlir::acc::GlobalVariableOpInterface::ExternalModel<
69 GlobalVariableModel, fir::GlobalOp> {
70 bool isConstant(mlir::Operation *op)
const;
71 bool hasInitializer(mlir::Operation *op)
const;
72 mlir::Region *getInitRegion(mlir::Operation *op)
const;
73 bool isDeviceAccessible(mlir::Operation *op)
const;
74 bool isInDeviceMemory(mlir::Operation *op)
const;
75 bool isCompilerGenerated(mlir::Operation *op)
const;
80 :
public mlir::acc::IndirectGlobalAccessOpInterface::ExternalModel<
81 IndirectGlobalAccessModel<Op>, Op> {
82 void getReferencedSymbols(mlir::Operation *op,
84 mlir::SymbolTable *symbolTable)
const;
93 :
public mlir::acc::OutlineRematerializationOpInterface::ExternalModel<
94 OutlineRematerializationModel<Op>, Op> {
95 bool isRematerializationCandidate(mlir::Operation *op)
const {
return true; }
100 :
public mlir::acc::OutlineRematerializationOpInterface::ExternalModel<
101 OutlineRematerializationModel<fir::ConvertOp>, fir::ConvertOp> {
102 bool isRematerializationCandidate(mlir::Operation *op)
const;
112template <
typename Op>
114 :
public mlir::acc::OutlineIdentityOperandOpInterface::ExternalModel<
115 OutlineIdentityOperandDeclareModel<Op>, Op> {
116 void dropOutlinedIdentityOperands(mlir::Operation *op)
const;
122template <
typename Op>
124 :
public mlir::acc::OffloadRegionOpInterface::ExternalModel<
125 OffloadRegionModel<Op>, Op> {
126 mlir::Region &getOffloadRegion(mlir::Operation *op)
const {
127 return mlir::cast<Op>(op).getRegion();
135template <
typename Op>
137 OperationMoveModel<Op>, Op> {
142 bool canMoveFromDescendant(mlir::Operation *op, mlir::Operation *descendant,
143 mlir::Operation *candidate)
const;
149 bool canMoveOutOf(mlir::Operation *op, mlir::Operation *candidate)
const;
153void verifyFortranObjectViewResult(mlir::Operation *op,
154 mlir::OpResult resultView);
158template <
typename Op>
160 :
public fir::FortranObjectViewOpInterface::ExternalModel<
161 AccFortranObjectViewModel<Op>, Op> {
162 mlir::Value getViewSource(mlir::Operation *op,
163 mlir::OpResult resultView)
const;
164 std::optional<std::int64_t> getViewOffset(mlir::Operation *op,
165 mlir::OpResult resultView)
const {
166 detail::verifyFortranObjectViewResult(op, resultView);
Definition AbstractConverter.h:37
External model for acc ops whose result is a zero-offset view of an operand.
Definition FIROpenACCOpsInterfaces.h:161
Definition FIROpenACCOpsInterfaces.h:63
Definition FIROpenACCOpsInterfaces.h:69
Definition FIROpenACCOpsInterfaces.h:81
Definition FIROpenACCOpsInterfaces.h:125
Definition FIROpenACCOpsInterfaces.h:137
Definition FIROpenACCOpsInterfaces.h:115
Definition FIROpenACCOpsInterfaces.h:94
Definition FIROpenACCOpsInterfaces.h:37