23 :
public mlir::acc::PointerLikeType::ExternalModel<
24 OpenACCPointerLikeModel<T>, T> {
25 mlir::Type getElementType(mlir::Type pointer)
const {
26 return mlir::cast<T>(pointer).getElementType();
28 mlir::acc::VariableTypeCategory
29 getPointeeTypeCategory(mlir::Type pointer,
30 mlir::TypedValue<mlir::acc::PointerLikeType> varPtr,
31 mlir::Type varType)
const;
33 mlir::Value genAllocate(mlir::Type pointer, mlir::OpBuilder &builder,
34 mlir::Location loc, llvm::StringRef varName,
35 mlir::Type varType, mlir::Value originalVar,
36 bool &needsFree)
const;
38 bool genFree(mlir::Type pointer, mlir::OpBuilder &builder, mlir::Location loc,
39 mlir::TypedValue<mlir::acc::PointerLikeType> varToFree,
40 mlir::Value allocRes, mlir::Type varType)
const;
42 bool genCopy(mlir::Type pointer, mlir::OpBuilder &builder, mlir::Location loc,
43 mlir::TypedValue<mlir::acc::PointerLikeType> destination,
44 mlir::TypedValue<mlir::acc::PointerLikeType> source,
45 mlir::Type varType)
const;
47 mlir::Value genLoad(mlir::Type pointer, mlir::OpBuilder &builder,
49 mlir::TypedValue<mlir::acc::PointerLikeType> srcPtr,
50 mlir::Type valueType)
const;
52 bool genStore(mlir::Type pointer, mlir::OpBuilder &builder,
53 mlir::Location loc, mlir::Value valueToStore,
54 mlir::TypedValue<mlir::acc::PointerLikeType> destPtr)
const;
56 mlir::Value genCast(mlir::Type pointer, mlir::OpBuilder &builder,
57 mlir::Location loc, mlir::Value value,
58 mlir::Type resultType)
const;
60 mlir::MemRefType getAsMemRefType(mlir::Type pointer,
61 mlir::ModuleOp module)
const;
63 bool isDeviceAccessible(mlir::Type pointer, mlir::Value var,
64 mlir::SymbolTableCollection *symbolTables)
const;
66 bool isInDeviceMemory(mlir::Type pointer, mlir::Value var,
67 mlir::SymbolTableCollection *symbolTables)
const;
72 :
public mlir::acc::MappableType::ExternalModel<OpenACCMappableModel<T>,
74 mlir::TypedValue<mlir::acc::PointerLikeType> getVarPtr(::mlir::Type type,
75 mlir::Value var)
const;
77 std::optional<llvm::TypeSize>
78 getSizeInBytes(mlir::Type type, mlir::Value var, mlir::ValueRange accBounds,
79 const mlir::DataLayout &dataLayout)
const;
81 std::optional<int64_t>
82 getOffsetInBytes(mlir::Type type, mlir::Value var, mlir::ValueRange accBounds,
83 const mlir::DataLayout &dataLayout)
const;
85 bool hasUnknownDimensions(mlir::Type type)
const;
88 generateAccBounds(mlir::Type type, mlir::Value var,
89 mlir::OpBuilder &builder)
const;
91 mlir::acc::VariableTypeCategory getTypeCategory(mlir::Type type,
92 mlir::Value var)
const;
94 mlir::acc::VariableInfoAttr
95 genPrivateVariableInfo(mlir::Type type,
96 mlir::TypedValue<mlir::acc::MappableType> var)
const;
98 mlir::Value generatePrivateInit(
99 mlir::Type type, mlir::OpBuilder &builder, mlir::Location loc,
100 mlir::TypedValue<mlir::acc::MappableType> var, llvm::StringRef varName,
101 mlir::ValueRange extents, mlir::Value initVal,
102 mlir::acc::VariableInfoAttr varInfo,
bool &needsDestroy,
105 bool generatePrivateDestroy(mlir::Type type, mlir::OpBuilder &builder,
106 mlir::Location loc, mlir::Value privatized,
107 mlir::ValueRange destroyValues,
108 mlir::ValueRange bounds,
109 mlir::acc::VariableInfoAttr varInfo)
const;
111 bool generateCopy(mlir::Type type, mlir::OpBuilder &mlirBuilder,
113 mlir::TypedValue<mlir::acc::MappableType> source,
114 mlir::TypedValue<mlir::acc::MappableType> dest,
115 mlir::ValueRange bounds,
116 mlir::acc::VariableInfoAttr varInfo)
const;
118 bool generateCombiner(mlir::Type type, mlir::OpBuilder &mlirBuilder,
120 mlir::TypedValue<mlir::acc::MappableType> dest,
121 mlir::TypedValue<mlir::acc::MappableType> source,
122 mlir::ValueRange bounds,
123 mlir::acc::ReductionOperator op,
124 mlir::Attribute fastmathFlags)
const;
126 bool isDeviceAccessible(mlir::Type type, mlir::Value var,
127 mlir::SymbolTableCollection *symbolTables)
const;
129 bool isInDeviceMemory(mlir::Type type, mlir::Value var,
130 mlir::SymbolTableCollection *symbolTables)
const;