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;
105template <
typename Op>
107 :
public mlir::acc::OffloadRegionOpInterface::ExternalModel<
108 OffloadRegionModel<Op>, Op> {
109 mlir::Region &getOffloadRegion(mlir::Operation *op)
const {
110 return mlir::cast<Op>(op).getRegion();
118template <
typename Op>
120 OperationMoveModel<Op>, Op> {
125 bool canMoveFromDescendant(mlir::Operation *op, mlir::Operation *descendant,
126 mlir::Operation *candidate)
const;
132 bool canMoveOutOf(mlir::Operation *op, mlir::Operation *candidate)
const;
136 :
public fir::FortranObjectViewOpInterface::ExternalModel<
137 ReductionInitOpFortranObjectViewModel, mlir::acc::ReductionInitOp> {
138 mlir::Value getViewSource(mlir::Operation *op,
139 mlir::OpResult resultView)
const;
140 std::optional<std::int64_t> getViewOffset(mlir::Operation *op,
141 mlir::OpResult resultView)
const;
Definition AbstractConverter.h:37
Definition FIROpenACCOpsInterfaces.h:63
Definition FIROpenACCOpsInterfaces.h:69
Definition FIROpenACCOpsInterfaces.h:78
Definition FIROpenACCOpsInterfaces.h:108
Definition FIROpenACCOpsInterfaces.h:120
Definition FIROpenACCOpsInterfaces.h:91
Definition FIROpenACCOpsInterfaces.h:37
Definition FIROpenACCOpsInterfaces.h:137