1//===- Predicate.cpp - Pattern predicates ---------------------------------===//
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#include "Predicate.h"
10
11using namespace mlir;
12using namespace mlir::pdl_to_pdl_interp;
13
14//===----------------------------------------------------------------------===//
15// Positions
16//===----------------------------------------------------------------------===//
17
18Position::~Position() = default;
19
20/// Returns the depth of the first ancestor operation position.
21unsigned Position::getOperationDepth() const {
22 if (const auto *operationPos = dyn_cast<OperationPosition>(Val: this))
23 return operationPos->getDepth();
24 return parent ? parent->getOperationDepth() : 0;
25}
26
27//===----------------------------------------------------------------------===//
28// AttributePosition
29
30AttributePosition::AttributePosition(const KeyTy &key) : Base(key) {
31 parent = key.first;
32}
33
34//===----------------------------------------------------------------------===//
35// OperandPosition
36
37OperandPosition::OperandPosition(const KeyTy &key) : Base(key) {
38 parent = key.first;
39}
40
41//===----------------------------------------------------------------------===//
42// OperandGroupPosition
43
44OperandGroupPosition::OperandGroupPosition(const KeyTy &key) : Base(key) {
45 parent = std::get<0>(t: key);
46}
47
48//===----------------------------------------------------------------------===//
49// OperationPosition
50
51bool OperationPosition::isOperandDefiningOp() const {
52 return isa_and_nonnull<OperandPosition, OperandGroupPosition>(Val: parent);
53}
54

source code of mlir/lib/Conversion/PDLToPDLInterp/Predicate.cpp