File: IRDLSymbols.cpp

package info (click to toggle)
swiftlang 6.1.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,791,604 kB
  • sloc: cpp: 9,901,740; ansic: 2,201,431; asm: 1,091,827; python: 308,252; objc: 82,166; f90: 80,126; lisp: 38,358; pascal: 25,559; sh: 20,429; ml: 5,058; perl: 4,745; makefile: 4,484; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (38 lines) | stat: -rw-r--r-- 1,355 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//===- 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);
}