58 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "Predicate.h"10 11using namespace mlir;12using namespace mlir::pdl_to_pdl_interp;13 14//===----------------------------------------------------------------------===//15// Positions16//===----------------------------------------------------------------------===//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>(this))23 return operationPos->getDepth();24 return parent ? parent->getOperationDepth() : 0;25}26 27//===----------------------------------------------------------------------===//28// AttributePosition29//===----------------------------------------------------------------------===//30 31AttributePosition::AttributePosition(const KeyTy &key) : Base(key) {32 parent = key.first;33}34 35//===----------------------------------------------------------------------===//36// OperandPosition37//===----------------------------------------------------------------------===//38 39OperandPosition::OperandPosition(const KeyTy &key) : Base(key) {40 parent = key.first;41}42 43//===----------------------------------------------------------------------===//44// OperandGroupPosition45//===----------------------------------------------------------------------===//46 47OperandGroupPosition::OperandGroupPosition(const KeyTy &key) : Base(key) {48 parent = std::get<0>(key);49}50 51//===----------------------------------------------------------------------===//52// OperationPosition53//===----------------------------------------------------------------------===//54 55bool OperationPosition::isOperandDefiningOp() const {56 return isa_and_nonnull<OperandPosition, OperandGroupPosition>(parent);57}58