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//===----------------------------------------------------------------------===//
30
31AttributePosition::AttributePosition(const KeyTy &key) : Base(key) {
32 parent = key.first;
33}
34
35//===----------------------------------------------------------------------===//
36// OperandPosition
37//===----------------------------------------------------------------------===//
38
39OperandPosition::OperandPosition(const KeyTy &key) : Base(key) {
40 parent = key.first;
41}
42
43//===----------------------------------------------------------------------===//
44// OperandGroupPosition
45//===----------------------------------------------------------------------===//
46
47OperandGroupPosition::OperandGroupPosition(const KeyTy &key) : Base(key) {
48 parent = std::get<0>(t: key);
49}
50
51//===----------------------------------------------------------------------===//
52// OperationPosition
53//===----------------------------------------------------------------------===//
54
55bool OperationPosition::isOperandDefiningOp() const {
56 return isa_and_nonnull<OperandPosition, OperandGroupPosition>(Val: parent);
57}
58

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

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