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 mlir::Region *getInitRegion(mlir::Operation *op)
const;
72 bool isDeviceData(mlir::Operation *op)
const;
77 :
public mlir::acc::IndirectGlobalAccessOpInterface::ExternalModel<
78 IndirectGlobalAccessModel<Op>, Op> {
79 void getReferencedSymbols(mlir::Operation *op,
80 llvm::SmallVectorImpl<mlir::SymbolRefAttr> &symbols,
81 mlir::SymbolTable *symbolTable)
const;
90 :
public mlir::acc::OutlineRematerializationOpInterface::ExternalModel<
91 OutlineRematerializationModel<Op>, Op> {
92 bool isRematerializationCandidate(mlir::Operation *op)
const {
return true; }
97 :
public mlir::acc::OutlineRematerializationOpInterface::ExternalModel<
98 OutlineRematerializationModel<fir::ConvertOp>, fir::ConvertOp> {
99 bool isRematerializationCandidate(mlir::Operation *op)
const;
109template <
typename Op>
111 :
public mlir::acc::OutlineIdentityOperandOpInterface::ExternalModel<
112 OutlineIdentityOperandDeclareModel<Op>, Op> {
113 void dropOutlinedIdentityOperands(mlir::Operation *op)
const;
119template <
typename Op>
121 :
public mlir::acc::OffloadRegionOpInterface::ExternalModel<
122 OffloadRegionModel<Op>, Op> {
123 mlir::Region &getOffloadRegion(mlir::Operation *op)
const {
124 return mlir::cast<Op>(op).getRegion();
132template <
typename Op>
134 OperationMoveModel<Op>, Op> {
139 bool canMoveFromDescendant(mlir::Operation *op, mlir::Operation *descendant,
140 mlir::Operation *candidate)
const;
146 bool canMoveOutOf(mlir::Operation *op, mlir::Operation *candidate)
const;
150void verifyFortranObjectViewResult(mlir::Operation *op,
151 mlir::OpResult resultView);
155template <
typename Op>
157 :
public fir::FortranObjectViewOpInterface::ExternalModel<
158 AccFortranObjectViewModel<Op>, Op> {
159 mlir::Value getViewSource(mlir::Operation *op,
160 mlir::OpResult resultView)
const;
161 std::optional<std::int64_t> getViewOffset(mlir::Operation *op,
162 mlir::OpResult resultView)
const {
163 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:158
Definition FIROpenACCOpsInterfaces.h:63
Definition FIROpenACCOpsInterfaces.h:69
Definition FIROpenACCOpsInterfaces.h:78
Definition FIROpenACCOpsInterfaces.h:122
Definition FIROpenACCOpsInterfaces.h:134
Definition FIROpenACCOpsInterfaces.h:112
Definition FIROpenACCOpsInterfaces.h:91
Definition FIROpenACCOpsInterfaces.h:37