//===- Predicate.cpp - Pattern predicates ---------------------------------===// // // Part of the LLVM Project, 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 "Predicate.h" using namespace mlir; using namespace mlir::pdl_to_pdl_interp; //===----------------------------------------------------------------------===// // Positions //===----------------------------------------------------------------------===// Position::~Position() = default; /// Returns the depth of the first ancestor operation position. unsigned Position::getOperationDepth() const { if (const auto *operationPos = dyn_cast(this)) return operationPos->getDepth(); return parent ? parent->getOperationDepth() : 0; } //===----------------------------------------------------------------------===// // AttributePosition AttributePosition::AttributePosition(const KeyTy &key) : Base(key) { parent = key.first; } //===----------------------------------------------------------------------===// // OperandPosition OperandPosition::OperandPosition(const KeyTy &key) : Base(key) { parent = key.first; } //===----------------------------------------------------------------------===// // OperandGroupPosition OperandGroupPosition::OperandGroupPosition(const KeyTy &key) : Base(key) { parent = std::get<0>(key); } //===----------------------------------------------------------------------===// // OperationPosition bool OperationPosition::isOperandDefiningOp() const { return isa_and_nonnull(parent); }