14#include <mlir/Interfaces/CallInterfaces.h>
30llvm::SmallVector<mlir::StringRef>
getNames(mlir::SymbolRefAttr ref);
31llvm::SmallVector<mlir::FlatSymbolRefAttr>
getPieces(mlir::SymbolRefAttr ref);
34inline mlir::FlatSymbolRefAttr
36 return mlir::FlatSymbolRefAttr::get(mlir::StringAttr::get(context, twine));
40inline mlir::SymbolRefAttr
asSymbolRefAttr(mlir::StringAttr root, mlir::SymbolRefAttr tail) {
41 return mlir::SymbolRefAttr::get(root,
getPieces(tail));
45inline mlir::SymbolRefAttr
asSymbolRefAttr(llvm::ArrayRef<mlir::FlatSymbolRefAttr> path) {
46 return mlir::SymbolRefAttr::get(path.front().getAttr(), path.drop_front());
50inline mlir::SymbolRefAttr
asSymbolRefAttr(std::vector<mlir::FlatSymbolRefAttr> path) {
61 return mlir::SymbolRefAttr::get(
62 symbol.getRootReference(), symbol.getNestedReferences().drop_back()
67mlir::SymbolRefAttr
replaceLeaf(mlir::SymbolRefAttr orig, mlir::FlatSymbolRefAttr newLeaf);
68inline mlir::SymbolRefAttr
replaceLeaf(mlir::SymbolRefAttr orig, mlir::StringAttr newLeaf) {
69 return replaceLeaf(orig, mlir::FlatSymbolRefAttr::get(newLeaf));
71inline mlir::SymbolRefAttr
replaceLeaf(mlir::SymbolRefAttr orig,
const mlir::Twine &newLeaf) {
72 return replaceLeaf(orig, mlir::StringAttr::get(orig.getContext(), newLeaf));
76mlir::SymbolRefAttr
appendLeaf(mlir::SymbolRefAttr orig, mlir::FlatSymbolRefAttr newLeaf);
77inline mlir::SymbolRefAttr
appendLeaf(mlir::SymbolRefAttr orig, mlir::StringAttr newLeaf) {
78 return appendLeaf(orig, mlir::FlatSymbolRefAttr::get(newLeaf));
80inline mlir::SymbolRefAttr
appendLeaf(mlir::SymbolRefAttr orig,
const mlir::Twine &newLeaf) {
81 return appendLeaf(orig, mlir::StringAttr::get(orig.getContext(), newLeaf));
86mlir::SymbolRefAttr
appendLeafName(mlir::SymbolRefAttr orig,
const mlir::Twine &newLeafSuffix);
91mlir::FailureOr<mlir::SymbolRefAttr>
93mlir::FailureOr<mlir::SymbolRefAttr>
95mlir::FailureOr<mlir::SymbolRefAttr>
97mlir::FailureOr<mlir::SymbolRefAttr>
103mlir::FailureOr<mlir::SymbolRefAttr>
105mlir::FailureOr<mlir::SymbolRefAttr>
107mlir::FailureOr<mlir::SymbolRefAttr>
109mlir::FailureOr<mlir::SymbolRefAttr>
118inline mlir::FailureOr<SymbolLookupResult<T>>
119resolveCallable(mlir::SymbolTableCollection &symbolTable, mlir::CallOpInterface call) {
120 mlir::CallInterfaceCallable callable = call.getCallableForCallee();
121 if (
auto symbolVal = llvm::dyn_cast<mlir::Value>(callable)) {
129 auto symbolRef = callable.get<mlir::SymbolRefAttr>();
130 mlir::Operation *op = symbolTable.lookupNearestSymbolFrom(call.getOperation(), symbolRef);
140inline mlir::FailureOr<SymbolLookupResult<T>>
resolveCallable(mlir::CallOpInterface call) {
141 mlir::SymbolTableCollection symbolTable;
147 mlir::SymbolTableCollection &tables, mlir::SymbolRefAttr param, mlir::Type structOrArrayType,
148 mlir::Operation *origin
154 mlir::SymbolTableCollection &tables, mlir::ArrayRef<mlir::Attribute> tyParams,
155 mlir::Type structOrArrayType, mlir::Operation *origin
168template <std::ranges::input_range Range>
170 mlir::SymbolTableCollection &tables, mlir::Operation *origin,
const Range &types
174 for (
const auto &t : types) {
177 return mlir::LogicalResult::failure(failed);
Apache License January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation and configuration files Object form shall mean any form resulting from mechanical transformation or translation of a Source including but not limited to compiled object generated and conversions to other media types Work shall mean the work of whether in Source or Object made available under the as indicated by a copyright notice that is included in or attached to the whether in Source or Object that is based or other modifications as a an original work of authorship For the purposes of this Derivative Works shall not include works that remain separable from
This file defines methods symbol lookup across LLZK operations and included files.
mlir::SymbolRefAttr getPrefixAsSymbolRefAttr(mlir::SymbolRefAttr symbol)
Return SymbolRefAttr like the one given but with the leaf/final element removed.
SymbolRefAttr appendLeafName(SymbolRefAttr orig, const Twine &newLeafSuffix)
mlir::FlatSymbolRefAttr getFlatSymbolRefAttr(mlir::MLIRContext *context, const mlir::Twine &twine)
Construct a FlatSymbolRefAttr with the given content.
mlir::FailureOr< SymbolLookupResultUntyped > lookupTopLevelSymbol(mlir::SymbolTableCollection &tables, mlir::SymbolRefAttr symbol, mlir::Operation *origin, bool reportMissing=true)
llvm::SmallVector< StringRef > getNames(SymbolRefAttr ref)
FailureOr< ModuleOp > getRootModule(Operation *from)
SymbolRefAttr appendLeaf(SymbolRefAttr orig, FlatSymbolRefAttr newLeaf)
SymbolRefAttr replaceLeaf(SymbolRefAttr orig, FlatSymbolRefAttr newLeaf)
FailureOr< StructDefOp > verifyStructTypeResolution(SymbolTableCollection &tables, StructType ty, Operation *origin)
mlir::FailureOr< SymbolLookupResult< T > > resolveCallable(mlir::SymbolTableCollection &symbolTable, mlir::CallOpInterface call)
Based on mlir::CallOpInterface::resolveCallable, but using LLZK lookup helpers.
FailureOr< ModuleOp > getTopRootModule(Operation *from)
LogicalResult verifyTypeResolution(SymbolTableCollection &tables, Operation *origin, Type ty)
LogicalResult verifyParamsOfType(SymbolTableCollection &tables, ArrayRef< Attribute > tyParams, Type parameterizedType, Operation *origin)
mlir::SymbolRefAttr asSymbolRefAttr(mlir::StringAttr root, mlir::SymbolRefAttr tail)
Build a SymbolRefAttr that prepends tail with root, i.e., root::tail.
mlir::SymbolRefAttr getTailAsSymbolRefAttr(mlir::SymbolRefAttr symbol)
Return SymbolRefAttr like the one given but with the root/head element removed.
FailureOr< SymbolRefAttr > getPathFromTopRoot(SymbolOpInterface to, ModuleOp *foundRoot)
LogicalResult verifyParamOfType(SymbolTableCollection &tables, SymbolRefAttr param, Type parameterizedType, Operation *origin)
llvm::SmallVector< FlatSymbolRefAttr > getPieces(SymbolRefAttr ref)
FailureOr< SymbolRefAttr > getPathFromRoot(SymbolOpInterface to, ModuleOp *foundRoot)