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() {} 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->getOperationDepth(); 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