18a1ca2cdSRiver Riddle //===- Predicate.cpp - Pattern predicates ---------------------------------===// 28a1ca2cdSRiver Riddle // 38a1ca2cdSRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 48a1ca2cdSRiver Riddle // See https://llvm.org/LICENSE.txt for license information. 58a1ca2cdSRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 68a1ca2cdSRiver Riddle // 78a1ca2cdSRiver Riddle //===----------------------------------------------------------------------===// 88a1ca2cdSRiver Riddle 98a1ca2cdSRiver Riddle #include "Predicate.h" 108a1ca2cdSRiver Riddle 118a1ca2cdSRiver Riddle using namespace mlir; 128a1ca2cdSRiver Riddle using namespace mlir::pdl_to_pdl_interp; 138a1ca2cdSRiver Riddle 148a1ca2cdSRiver Riddle //===----------------------------------------------------------------------===// 158a1ca2cdSRiver Riddle // Positions 168a1ca2cdSRiver Riddle //===----------------------------------------------------------------------===// 178a1ca2cdSRiver Riddle 18e5639b3fSMehdi Amini Position::~Position() = default; 198a1ca2cdSRiver Riddle 203a833a0eSRiver Riddle /// Returns the depth of the first ancestor operation position. getOperationDepth() const213a833a0eSRiver Riddleunsigned Position::getOperationDepth() const { 223a833a0eSRiver Riddle if (const auto *operationPos = dyn_cast<OperationPosition>(this)) 233a833a0eSRiver Riddle return operationPos->getDepth(); 24233e9476SRiver Riddle return parent ? parent->getOperationDepth() : 0; 253a833a0eSRiver Riddle } 263a833a0eSRiver Riddle 278a1ca2cdSRiver Riddle //===----------------------------------------------------------------------===// 288a1ca2cdSRiver Riddle // AttributePosition 298a1ca2cdSRiver Riddle AttributePosition(const KeyTy & key)308a1ca2cdSRiver RiddleAttributePosition::AttributePosition(const KeyTy &key) : Base(key) { 318a1ca2cdSRiver Riddle parent = key.first; 328a1ca2cdSRiver Riddle } 338a1ca2cdSRiver Riddle 348a1ca2cdSRiver Riddle //===----------------------------------------------------------------------===// 358a1ca2cdSRiver Riddle // OperandPosition 368a1ca2cdSRiver Riddle OperandPosition(const KeyTy & key)378a1ca2cdSRiver RiddleOperandPosition::OperandPosition(const KeyTy &key) : Base(key) { 388a1ca2cdSRiver Riddle parent = key.first; 398a1ca2cdSRiver Riddle } 408a1ca2cdSRiver Riddle 418a1ca2cdSRiver Riddle //===----------------------------------------------------------------------===// 423a833a0eSRiver Riddle // OperandGroupPosition 438a1ca2cdSRiver Riddle OperandGroupPosition(const KeyTy & key)443a833a0eSRiver RiddleOperandGroupPosition::OperandGroupPosition(const KeyTy &key) : Base(key) { 453a833a0eSRiver Riddle parent = std::get<0>(key); 468a1ca2cdSRiver Riddle } 478521850fSBenjamin Kramer 488521850fSBenjamin Kramer //===----------------------------------------------------------------------===// 498521850fSBenjamin Kramer // OperationPosition 508521850fSBenjamin Kramer isOperandDefiningOp() const51*2692eae5SStanislav Funiakbool OperationPosition::isOperandDefiningOp() const { 52*2692eae5SStanislav Funiak return isa_and_nonnull<OperandPosition, OperandGroupPosition>(parent); 53*2692eae5SStanislav Funiak } 54