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 11 using namespace mlir; 12 using namespace mlir::pdl_to_pdl_interp; 13 14 //===----------------------------------------------------------------------===// 15 // Positions 16 //===----------------------------------------------------------------------===// 17 18 Position::~Position() = default; 19 20 /// Returns the depth of the first ancestor operation position. 21 unsigned 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 // AttributePosition 29 30 AttributePosition::AttributePosition(const KeyTy &key) : Base(key) { 31 parent = key.first; 32 } 33 34 //===----------------------------------------------------------------------===// 35 // OperandPosition 36 37 OperandPosition::OperandPosition(const KeyTy &key) : Base(key) { 38 parent = key.first; 39 } 40 41 //===----------------------------------------------------------------------===// 42 // OperandGroupPosition 43 44 OperandGroupPosition::OperandGroupPosition(const KeyTy &key) : Base(key) { 45 parent = std::get<0>(key); 46 } 47 48 //===----------------------------------------------------------------------===// 49 // OperationPosition 50 51 bool OperationPosition::isOperandDefiningOp() const { 52 return isa_and_nonnull<OperandPosition, OperandGroupPosition>(parent); 53 } 54