MLIR 24.0.0git
OpenACCSupport.cpp
Go to the documentation of this file.
1//===- OpenACCSupport.cpp - OpenACCSupport Implementation -----------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements the OpenACCSupport analysis interface.
10//
11//===----------------------------------------------------------------------===//
12
17
18namespace mlir {
19namespace acc {
20
22 VariableNameConfig config) {
23 if (impl)
24 return impl->getVariableName(v, config);
25 return acc::getVariableName(v);
26}
27
28std::string OpenACCSupport::getRecipeName(RecipeKind kind, Type type,
29 Value var) {
30 if (impl)
31 return impl->getRecipeName(kind, type, var);
32 // The default implementation assumes that only type matters
33 // and the actual instance of variable is not relevant.
34 auto recipeName = acc::getRecipeName(kind, type);
35 if (recipeName.empty())
36 emitNYI(var ? var.getLoc() : UnknownLoc::get(type.getContext()),
37 "variable privatization (incomplete recipe name handling)");
38 return recipeName;
39}
40
43 std::function<std::string()> messageFn,
44 llvm::StringRef category) {
45 if (impl)
46 return impl->emitRemark(op, std::move(messageFn), category);
47 return acc::emitRemark(op, messageFn(), category);
48}
49
50bool OpenACCSupport::isValidSymbolUse(Operation *user, SymbolRefAttr symbol,
51 Operation **definingOpPtr) {
52 if (impl)
53 return impl->isValidSymbolUse(user, symbol, definingOpPtr);
54 return acc::isValidSymbolUse(user, symbol, definingOpPtr);
55}
56
58 if (impl)
59 return impl->isValidValueUse(v, region);
60 return acc::isValidValueUse(v, region);
61}
62
63std::optional<gpu::GPUModuleOp>
64OpenACCSupport::getOrCreateGPUModule(ModuleOp mod, bool create,
65 llvm::StringRef name) {
66 if (impl)
67 return impl->getOrCreateGPUModule(mod, create, name);
68 return acc::getOrCreateGPUModule(mod, create, name);
69}
70
71} // namespace acc
72} // namespace mlir
Operation is the basic unit of execution within MLIR.
Definition Operation.h:87
This class contains a list of basic blocks and a link to the parent operation it is attached to.
Definition Region.h:26
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
Definition Types.h:74
MLIRContext * getContext() const
Return the MLIRContext in which this type was uniqued.
Definition Types.cpp:35
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
Definition Value.h:96
Location getLoc() const
Return the location of this value.
Definition Value.cpp:24
remark::detail::InFlightRemark emitRemark(Operation *op, std::function< std::string()> messageFn, llvm::StringRef category="openacc")
Emit an OpenACC remark with lazy message generation.
std::string getVariableName(Value v, VariableNameConfig config={})
Get the variable name for a given value.
InFlightDiagnostic emitNYI(Location loc, const Twine &message)
Report a case that is not yet supported by the implementation.
bool isValidValueUse(Value v, Region &region)
Check if a value use is legal in an OpenACC region.
bool isValidSymbolUse(Operation *user, SymbolRefAttr symbol, Operation **definingOpPtr=nullptr)
Check if a symbol use is valid for use in an OpenACC region.
std::optional< gpu::GPUModuleOp > getOrCreateGPUModule(ModuleOp mod, bool create=true, llvm::StringRef name="")
Get or optionally create a GPU module in the given module.
std::string getRecipeName(RecipeKind kind, Type type, Value var)
Get the recipe name for a given type and value.
A wrapper for linking remarks by query - searches the engine's registry at stream time and links to a...
Definition Remarks.h:402
std::string getVariableName(mlir::Value v)
Attempts to extract the variable name from a value by walking through view-like operations until an a...
bool isValidSymbolUse(mlir::Operation *user, mlir::SymbolRefAttr symbol, mlir::Operation **definingOpPtr=nullptr)
Check if a symbol use is valid for use in an OpenACC region.
std::optional< gpu::GPUModuleOp > getOrCreateGPUModule(ModuleOp mod, bool create=true, llvm::StringRef name=kDefaultGPUModuleName)
Get or create a GPU module in the given module.
bool isValidValueUse(mlir::Value val, mlir::Region &region)
Check if a value use is valid in an OpenACC region.
std::string getRecipeName(mlir::acc::RecipeKind kind, mlir::Type type)
Get the recipe name for a given recipe kind and type.
remark::detail::InFlightRemark emitRemark(mlir::Operation *op, const std::function< std::string()> &messageFn, llvm::StringRef category="openacc")
Emit an OpenACC remark with lazy message generation.
Include the generated interface declarations.
How the name of a variable is to be rendered.