xref: /llvm-project/mlir/lib/Conversion/PDLToPDLInterp/Predicate.cpp (revision 2692eae57428e1136ab58ac4004883245d0623ca)
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 Riddle unsigned 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 Riddle AttributePosition::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 Riddle OperandPosition::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 Riddle OperandGroupPosition::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 Funiak bool OperationPosition::isOperandDefiningOp() const {
52*2692eae5SStanislav Funiak   return isa_and_nonnull<OperandPosition, OperandGroupPosition>(parent);
53*2692eae5SStanislav Funiak }
54