//===- Predicate.cpp - Pattern predicates ---------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "Predicate.h" using namespace mlir; using namespace mlir::pdl_to_pdl_interp; //===----------------------------------------------------------------------===// // Positions //===----------------------------------------------------------------------===// Position::~Position() {} //===----------------------------------------------------------------------===// // AttributePosition AttributePosition::AttributePosition(const KeyTy &key) : Base(key) { parent = key.first; } //===----------------------------------------------------------------------===// // OperandPosition OperandPosition::OperandPosition(const KeyTy &key) : Base(key) { parent = key.first; } //===----------------------------------------------------------------------===// // OperationPosition OperationPosition *OperationPosition::get(StorageUniquer &uniquer, ArrayRef index) { assert(!index.empty() && "expected at least two indices"); // Set the parent position if this isn't the root. Position *parent = nullptr; if (index.size() > 1) { auto *node = OperationPosition::get(uniquer, index.drop_back()); parent = OperandPosition::get(uniquer, std::make_pair(node, index.back())); } return uniquer.get( [parent](OperationPosition *node) { node->parent = parent; }, index); }