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 isDeviceData(mlir::Operation *op)
const;
78 :
public mlir::acc::IndirectGlobalAccessOpInterface::ExternalModel<
79 IndirectGlobalAccessModel<Op>, Op> {
80 void getReferencedSymbols(mlir::Operation *op,
81 llvm::SmallVectorImpl<mlir::SymbolRefAttr> &symbols,
82 mlir::SymbolTable *symbolTable)
const;
91 :
public mlir::acc::OutlineRematerializationOpInterface::ExternalModel<
92 OutlineRematerializationModel<Op>, Op> {
93 bool isRematerializationCandidate(mlir::Operation *op)
const {
return true; }
98 :
public mlir::acc::OutlineRematerializationOpInterface::ExternalModel<
99 OutlineRematerializationModel<fir::ConvertOp>, fir::ConvertOp> {
100 bool isRematerializationCandidate(mlir::Operation *op)
const;
110template <
typename Op>
112 :
public mlir::acc::OutlineIdentityOperandOpInterface::ExternalModel<
113 OutlineIdentityOperandDeclareModel<Op>, Op> {
114 void dropOutlinedIdentityOperands(mlir::Operation *op)
const;
120template <
typename Op>
122 :
public mlir::acc::OffloadRegionOpInterface::ExternalModel<
123 OffloadRegionModel<Op>, Op> {
124 mlir::Region &getOffloadRegion(mlir::Operation *op)
const {
125 return mlir::cast<Op>(op).getRegion();
133template <
typename Op>
135 OperationMoveModel<Op>, Op> {
140 bool canMoveFromDescendant(mlir::Operation *op, mlir::Operation *descendant,
141 mlir::Operation *candidate)
const;
147 bool canMoveOutOf(mlir::Operation *op, mlir::Operation *candidate)
const;
151void verifyFortranObjectViewResult(mlir::Operation *op,
152 mlir::OpResult resultView);
156template <
typename Op>
158 :
public fir::FortranObjectViewOpInterface::ExternalModel<
159 AccFortranObjectViewModel<Op>, Op> {
160 mlir::Value getViewSource(mlir::Operation *op,
161 mlir::OpResult resultView)
const;
162 std::optional<std::int64_t> getViewOffset(mlir::Operation *op,
163 mlir::OpResult resultView)
const {
164 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:159
Definition FIROpenACCOpsInterfaces.h:63
Definition FIROpenACCOpsInterfaces.h:69
Definition FIROpenACCOpsInterfaces.h:79
Definition FIROpenACCOpsInterfaces.h:123
Definition FIROpenACCOpsInterfaces.h:135
Definition FIROpenACCOpsInterfaces.h:113
Definition FIROpenACCOpsInterfaces.h:92
Definition FIROpenACCOpsInterfaces.h:37