Files
clang-p2996/mlir/lib/Dialect/IRDL/IRDLSymbols.cpp
Théo Degioanni b86a9c5bf2 [mlir][irdl] Lookup symbols near dialects instead of locally (#92819)
Because symbols cannot refer to operations outside of their symbol
tables, it was impossible to refer to operations outside of the dialect
currently being defined. This PR modifies the lookup logic to happen
relative to the symbol table containing the dialect-defining operations.
This is a bit of hack but should unblock the situation here.
2024-05-31 09:15:50 +01:00

39 lines
1.3 KiB
C++

//===- IRDLSymbols.cpp - IRDL-related symbol logic --------------*- C++ -*-===//
//
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "mlir/Dialect/IRDL/IRDLSymbols.h"
#include "mlir/Dialect/IRDL/IR/IRDL.h"
using namespace mlir;
using namespace mlir::irdl;
static Operation *lookupDialectOp(Operation *source) {
Operation *dialectOp = source;
while (dialectOp && !isa<DialectOp>(dialectOp))
dialectOp = dialectOp->getParentOp();
if (!dialectOp)
llvm_unreachable("symbol lookup near dialect must originate from "
"within a dialect definition");
return dialectOp;
}
Operation *
mlir::irdl::lookupSymbolNearDialect(SymbolTableCollection &symbolTable,
Operation *source, SymbolRefAttr symbol) {
return symbolTable.lookupNearestSymbolFrom(
lookupDialectOp(source)->getParentOp(), symbol);
}
Operation *mlir::irdl::lookupSymbolNearDialect(Operation *source,
SymbolRefAttr symbol) {
return SymbolTable::lookupNearestSymbolFrom(
lookupDialectOp(source)->getParentOp(), symbol);
}